查找

Time Limit 1000ms

Memory Limit 65536K

description

给你一串没有重复数字的递增序列,我们想要知道自己输入的数字在该序列的哪个位置。当然该序列的数字比较多。
							

input

测试数组有多组,每组测试数据第一行输入一个整数n,(1<=n<=100000)
第二行开始有n个非负整数,各不相同并且递增,并且每个数小于10000000。第三行输入一个整数m,代表需要查找的次数。接下来有一行,有m个查询的数字,且小于10000000.
							

output

对于每次查询,如果该序列中存在该查询的数,就输出他的位置;如果不存在,则输出”Not find!”
							

sample_input

6
0 1 2 3 4 5
3
-1 5 6
7
0 2 4 6 8 10 12
4
0 12 -3 3
							

sample_output

Not find!
5
Not find!
0
6
Not find!
Not find!

 

直接上代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n,m,s,e,t,x,f,k,i,a[100001];
 8     while(cin>>n)
 9     {
10         for(i=0;i<n;i++) scanf("%d",&a[i]);
11         cin>>t;
12         for(i=0;i<t;i++)
13         {
14             scanf("%d",&x);
15             s=0;e=n-1;f=0;
16             while(s<=e)
17             {
18                 m=(s+e)/2;
19                 if(a[m]<x) s=m+1;
20                 if(a[m]>x) e=m-1;
21                 if(a[m]==x) {f=1;k=m;break;}
22             }
23             if(f==1) printf("%d\n",k);
24             if(f==0) printf("Not find!\n");
25         }
26     }
27     return 0;
28 }
View Code

 

posted on 2013-08-05 20:00  Areson  阅读(248)  评论(0)    收藏  举报