顺序表应用6:有序顺序表查询
TimeLimit: 7MS Memory Limit: 700KB
SubmitStatistic
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“NoFound!"。
Input
第一行输入整数n,表示顺序表的元素个数;第二行依次输入n个各不相同的有序整数,代表表里的元素;第三行输入整数t,代表要查询的次数;第四行依次输入t个整数,代表每次要查询的数值。
Output
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出NoFound!
ExampleInput
10
122 33 55 63 70 74 79 80 87
4
5510 2 87
ExampleOutput
4
NoFound!
NoFound!
10
Hint
Author
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<iostream>#include<algorithm>#include<stack>#include<queue>#include<deque>#define max 20002using namespace std;typedef struct node{ int *elem; int size; int length;}list;int init(list *l){ l->elem=(int*)malloc(max*sizeof(int)); if(l->elem) return 0; l->length = 0; l->size = max; return 1;}void creat(list *l,int n){ for(int i=1;i<=n;i++) {scanf("%d",&l->elem[i]);} l->length = n;}void changelist(list *l,int m){ for(int i=0;i<m;i++) { int tmp = l->elem[0]; for(int j =0;j<l->length-1;j++) l->elem[j] = l->elem[j+1]; l->elem[l->length-1] = tmp; }}void check(list*l,int s,int h,int m){ int i,t; for(i=1;i<=m;i++) { t = l->elem[s]; l->elem[s++]=l->elem[h]; l->elem[h--]=t; }}void print(list*c){ for(int i=1;i<c->length;i++) { printf("%d ",c->elem[i]); } printf("%d/n",c->elem[c->length]);}int order(list*l,int n){ int x,mid,low,high; scanf("%d",&x); low = 1; high =n; while(low<=high) { mid = (low+high)/2; if(x>l->elem[mid]) low = mid+1; else if(x<l->elem[mid]) high = mid-1; else return mid; } return -1;}int main(){ list l; int x,n ,t; cin>>n; init(&l); creat(&l,n); cin>>t; while(t--) { x = order(&l,n); if(x==-1) cout<<"No Found!"<<endl; else cout<<x<<endl; }return 0;}/***************************************************User name: jk160505徐红博Result: AcceptedTake time: 8msTake Memory: 240KBSubmit time: 2017-01-14 21:08:20****************************************************/
新闻热点
疑难解答