-
题目描述:
-
输入N个学生的信息,然后进行查询。
-
输入:
-
输入的第一行为N,即学生的个数(N<=1000)
接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:02030104
-
输出:
-
输出M行,每行包括一个对应于查询的学生的信息。
如果没有对应的学生信息,则输出“No Answer!”
-
样例输入:
-
4 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 5 02 03 01 04 03
-
样例输出:
-
02 刘唐 男 23 03 张军 男 19 01 李江 男 21 04 王娜 女 19 03 张军 男 19
-
// **很简单的查找问题,对于有序表进行二分查找。 **对于循环有了更深刻的理解,while(m--!=0),执行m次。 // #include "stdafx.h" #include <algorithm> using namespace std; struct Info {int num; char name[30]; char gender[4]; int age; }buf[10001]; bool cmp(Info a,Info b){ return a.num<b.num; } int _tmain(int argc, _TCHAR* argv[]) {int n; while (scanf("%d",&n)) {for(int i =0;i<n;i++){ scanf("%d%s%s%d",&buf[i].num,&buf[i].name,&buf[i].gender,&buf[i].age); } sort(buf,buf+n,cmp); int m; scanf("%d",&m); while (m--!=0) { int answer=-1; int x; scanf("%d",&x); int top=n-1,base=0; while(top>=base){ int mid=(top+base)/2; if(buf[mid].num==x){ answer=mid; break; } else if(buf[mid].num>x){ top=mid-1; } else { base=mid+1; } } if (answer==-1) { printf("No Answer!"); } else printf("%d %s %s %d\n",buf[answer].num,buf[answer].name,buf[answer].gender,buf[answer].age); } } return 0; }