c语言输入的第一行是1个正整数n,表示共有n个整数。其中n不超过500。 第二行包含n个用空格隔开的正整数,表示n个有序的整数。输入保证这n个整数是从小到大递增的。 第三行是一个正整数k,代表要查询的关键字。 Output 包括两行。 第1行,输出查找过程中,依次和查找表中比较的元素(无论查找成功与否,均输出)。 第2行,输出查找结果,如果在查询中找到了对应的整数,则输出其第一次出现的位置,否则输出0。的代码
时间: 2024-03-12 08:43:49 浏览: 44
我们第一行包括两个整数n,k(1<=n<=100,k<=6e5),表示有n个数字,目标和为k 第二行输入n个整数(c1 c2
以下是基于C语言的代码实现:
```c
#include <stdio.h>
int main() {
int n, k;
scanf("%d", &n);
int nums[n];
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
scanf("%d", &k);
// 初始化变量
int low = 0, high = n - 1, pos = 0, found = 0, mid;
// 二分查找算法
while (low <= high) {
mid = (low + high) / 2;
pos++;
if (nums[mid] == k) {
found = 1;
break;
} else if (nums[mid] < k) {
low = mid + 1;
} else {
high = mid - 1;
}
}
// 输出查找过程
for (int i = 0; i < pos; i++) {
printf("%d ", nums[i]);
}
printf("\n");
// 输出查找结果
if (found) {
printf("%d\n", mid+1);
} else {
printf("0\n");
}
return 0;
}
```
代码思路:
1. 首先读入整数n以及有序整数序列nums和要查询的关键字k。
2. 定义整型数组nums,用于存储输入的n个有序整数。
3. 使用循环读入n个整数到nums数组中。
4. 读入关键字k。
5. 初始化变量low、high、pos和found,分别代表有序序列的最小下标、最大下标、查找过程中比较的元素数和是否找到关键字。
6. 在循环中,根据查找范围的中点与关键字的比较,更新low、high、pos和found变量。
7. 循环结束后,输出查找过程中比较的元素,以及查找结果。
阅读全文