Problem Description
顺序表内按照由小到大的次序存放着n个互不相同的整数,任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
Input
第一行输入整数n (1 <= n <= 100000),表示顺序表的元素个数;
第二行依次输入n个各不相同的有序非负整数,代表表里的元素;
第三行输入整数t (1 <= t <= 100000),代表要查询的次数;
第四行依次输入t个非负整数,代表每次要查询的数值。保证所有输入的数都在 int 范围内。
Output
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
Sample Input
10 1 22 33 55 63 70 74 79 80 87 4 55 10 2 87
Sample Output
4 No Found! No Found! 10
Hint
Source
代码如下:
#include<stdio.h>
int a[100001] ;
int n ;
int t ;
void find(int key)
{
int mid ,max , min ;
max = n-1;
min = 0 ;
while(min<=max)
{
mid = (max+min)/2 ;
if(a[mid]>key)
{
max= mid-1 ;
}
else if(a[mid]<key)
{
min = mid +1 ;
}
else
{
printf("%d\n",mid+1) ;
return ;
}
}
printf("No Found!\n") ;
return ;
}
int main()
{
int i ;
int m;
scanf("%d",&n) ;
for( i = 0 ; i< n ;i++)
scanf("%d",&a[i]) ;
scanf("%d",&t) ;
while(t--)
{
scanf("%d",&m) ;
find(m) ;
}
return 0 ;
}
代码2:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100001
typedef struct
{
int *elem ;
int length ;
}Sqlist ;
Sqlist creat(Sqlist l ,int n)
{
int i ;
l.elem = (Sqlist*)malloc(MAXSIZE*sizeof(Sqlist)) ;
l.length = n ;
for(i = 0 ; i< n ; i++)
{
scanf("%d",&l.elem[i]) ;
}
return l ;
}
void find(int t, Sqlist l)
{
int l1 , r ;
r = l.length-1 ;
l1 = 0 ;
while(l1<=r)
{
int mid = (l1+r) /2;
if(l.elem[mid]>t)
{
r = mid -1 ;
}
else if(l.elem[mid]<t)
{
l1 = mid+1;
}
else
{
printf("%d\n",mid+1) ;
return ;
}
}
printf("No Found!\n") ;
return ;
}
int main()
{
int n ;
Sqlist l ;
scanf("%d",&n) ;
l = creat(l,n) ;
int m , t ;
scanf("%d",&m) ;
while(m--)
{
scanf("%d",&t) ;
find(t,l) ;
}
return 0 ;
}