题目描述:将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。 ####相关知识(略) ####编程要求根据提示,在右侧编辑器Begin-End处补充代码。 输入 输入包括3行,第一行为整数n,第二行包括n个整数,以空格分隔,第三行为整数m。 输出 如果能够在序列中找到整数m,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None。c语言
时间: 2024-03-17 20:43:04 浏览: 61
百度之星05~08题目
以下是使用二分法查找的C语言代码:
```c
#include <stdio.h>
int main() {
int n, m;
scanf("%d", &n);
int nums[n];
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
scanf("%d", &m);
int left = 0, right = n - 1;
int result = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == m) {
result = mid + 1;
right = mid - 1;
} else if (nums[mid] < m) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (result != -1) {
printf("%d", result);
} else {
printf("None");
}
return 0;
}
```
解释:首先读入n、nums和m,其中nums是已经从小到大排序的整数数组。然后使用二分法查找m,若找到则记录下编号并继续在左半边查找(因为要找最小的编号),若没找到则继续在左右两半中查找。最后输出结果。注意在C语言中数组的长度需要在定义时确定,因此需要使用变长数组或动态内存分配的方式来定义nums。
阅读全文