题目:小明拿着本院100名校运会选手的号码牌走向操场,号码是101到200.出于道路施工加上下雨,小明摔跤后将号码牌散落在地,小明捡起来发现只有99张号码牌,请你编程帮小明快速找到是什么号码丢失
#include <stdio.h>
// 查找丢失的号码
int findMissingNumber(int actualCount, int* numbers) {
int buckets[100] = {0}; // 桶的范围是1到100
// 将实际号码放入桶中
for (int i = 101; i <= 200; i++) {
buckets[i - 101] = i;
}
// 遍历小明手上的号码牌,将对应的桶中的数字标记为已经存在
for (int i = 0; i < actualCount; i++) {
int index = numbers[i] - 101;
buckets[index] = 0; // 标记为已存在
}
// 寻找未被标记的桶,即为小明丢失的号码
for (int i = 0; i < 100; i++) {
if (buckets[i] != 0) {
return buckets[i];
}
}
// 如果没有找到,返回-1表示出错
return -1;
}
int main() {
// 模拟小明手上的99张号码牌
int numbers[99];
printf("Enter the 99 numbers on the cards: ");
for (int i = 0; i < 99; i++) {
scanf("%d", &numbers[i]);
}
// 查找丢失的号码
int missingNumber = findMissingNumber(99, numbers);
if (missingNumber != -1) {
printf("The missing number is: %d\n", missingNumber);
} else {
printf("Error: Missing number not found.\n");
}
return 0;
}
注重掌握桶排序的思想