目录
1152:题目描述
在有序序列中查找某一元素x。
输入
首先输入一个正整数n(n<=100000),表示该序列有n个整数,然后按从小到大的顺序输入n个整数;
接着是一个正整数m,表示有m次查找;
最后是m个整数,表示m个要查找的整数x。
输出
对于每一次查找,有一行输出。若序列中存在要查找的元素x,则输出元素x在序列中的序号(序号从0开始);若序列中不存在要查找的元素x,则输出"Not found!"。
答案:
(oj不过)
#include<stdio.h>
int main()
{
int n,m,i,a[99999],t,j;
scanf("%d",&n);//n个数字
for(i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d",&n);//查询n次
while(n--)
{
scanf("%d",&m);
for(t=i/2,j=0; j<=i/2;j++)
{
if(a[t]<m)
t=t+(i-t)/2;
if(a[t]>m)
t=t/2;
if(a[t]==m)
{
printf("%d\n",t);
t=-1;
break;
}
}
if(t!=-1)
printf("Not found!\n");
}
return 0;
}
(修改版,oj通过)
#include<stdio.h>
int main()
{
int n,m,i,a[99999],t,j,higt,low;
scanf("%d",&n);//n个数字
for(i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d",&n);//查询n次
while(n--)
{
scanf("%d",&m);
low=0;
higt=i-1;
while(low<=higt)
{
t=(higt+low)/2;
if(a[t]<m)
low=t+1;
if(a[t]>m)
higt=t-1;
if(a[t]==m)
{
printf("%d\n",t);
t=-1;
break;
}
}
if(t!=-1)
printf("Not found!\n");
}
return 0;
}