题&例子

例题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& - 博客园​