试题描述
有15个数按照由大到小顺序存放在一个数组中,输入一个数x,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”(不输出引号)。
已知数组元素的值各不相同。请使用数组实现。
输入
输入包含两行:
第一行是15个整数,相邻两项之间用一个空格隔开。
第二行是要查找的关键字x。
输出
输出x是数组中第几个(从1开始)元素的值,若找不到则输出“无此数”(不输出引号)。
输入示例1
99 97 83 77 50 45 31 24 23 16 14 8 4 2 1
77
输出示例1
4
输入示例2
99 97 83 77 50 45 31 24 23 16 14 8 4 2 1
20
输出示例2
无此数
数据范围
输入为int范围的整数
#include <stdio.h>
void main()
{
int a[15],start,x,j,i,end,flag=0;
for(j=0;j<15;j++)
scanf("%d",&a[j]);
scanf("%d",&x);
for(start=0,end=14;start<=end;)
{
i=start+(end-start)/2;
if(a[i]==x)
{
printf("%d",i+1);
flag=1;
break;
}
else if(a[i]<=x)
end=i-1;
else
start=i+1;
}
if(flag==0)
printf("无此数");
}