利用二分法在一个有N(N≤20)个元素的有序数列中查找指定值y。找到y后,先输出查找次数,再输出其在数组中对应的下标。若数列中存在多个y,将所有y的位置按下标序号顺序输出;
否则输出“not found”.
输入格式:
输入在第1行中给出1个不大于20的数N。在第2行给出N个数(升序),以空格分隔。最后在第3行给出待查找数据y。
输出格式:
若数列中存在y:先输出查询次数,在其后每行以格式“位置:k”,输出一个位置值。
若数列中没有y:输出“not found”。
输入样例 1:
10
34 56 78 87 87 87 87 112 520 888
87
输出样例 1:
查找次数1
位置:3
位置:4
位置:5
位置:6
输入样例 2:
10
34 56 78 87 87 87 87 112 520 888
80
输出样例 2:
not found
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
int main()
{
int n,super_number,i,j=0,left=0,k,time=1;
int a[20];
scanf ("%d",&n);
int right=n-1;
for (i=0;i<n;i++){
scanf("%d",&a[i]);}
scanf("%d",&super_number);
while (left<=right){
k=(left+right)/2;
if (super_number==a[k]){
break;
}
else if(super_number<a[k])
right=k-1;
else {left=k+1;}
time++;
}for (i=0;i<n;i++){
if (a[i]==super_number){
if(j==0){
printf("查找次数%d\n",time);
j=1;
printf("位置:%d\n",i);
}
else printf("位置:%d\n",i);
}
}
if (j==0)
{printf("not found");}
return 0;
}