题&例子
例题5-1 大理石在哪儿
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10000;
int main()
{
int n, q, x, a[maxn], kase = 0;
while (scanf("%d %d", &n, &q) == 2 && n) {
printf("CASE# %d:\n", ++kase);
for (int i = 0; i != n; ++i) {
scanf("%d", &a[i]);
// 读入 n 个大理石上的数字
}
sort(a, a + n); // 排序
while (q--) {
// 查找
scanf("%d", &x);
int p = lower_bound(a, a + n, x) - a; // 在已排序数组 a 中寻找 x
if (a[p] == x) {
printf("%d found at %d\n", x, p + 1);
} else {
printf("%d not found\n", x);
}
}
}
return 0;
}
关于“随机数,数组与指针”的例子。
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
const int maxn = 10000;
int a[maxn];
void printArray()
{
for (int i = 0; i != 10; ++i) {
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
srand((int) time(0)); // 随机数种子
for (int i = 0; i != 10; ++i) {
a[i] = rand() % 100; // 产生 [0,100) 之间的随机数
}
printArray();
// => 68 34 94 28 88 91 82 28 16 2
sort(a, a + 10); // 对下标为[0, 10)的元素进行排序
printArray();
// => 2 16 28 28 34 68 82 88 91 94
printf("%d %d\n", a, &a[0]); // => 4415552 4415552
printf("%d\n", lower_bound(a, a + 10, a[2])); // => 4415560
printf("%d\n", &a[2]); // => 4415560
printf("%d\n", &a[2] - a); // => 2
for (int i = 0; i != 3; ++i) {
printf("%d ", &a[i]);
} // => 4415552 4415556 4415560
printf("\n");
printf("%d %d", *(a + 2), a[2]); // 28 28
return 0;
}
参考
[1] C++产生随机数 - Lucky& - 博客园