查找学生信息

来源:互联网 发布:网络语言暴力自杀事件 编辑:程序博客网 时间:2024/05/06 01:53
题目描述:

 输入N个学生的信息,然后进行查询。

输入:

 输入的第一行为N,即学生的个数(N<=1000)

接下来的N行包括N个学生的信息,信息格式如下:
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:
02
03
01
04
输出:

 输出M行,每行包括一个对应于查询的学生的信息。

如果没有对应的学生信息,则输出“No Answer!”
样例输入:
401 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 1950203010403
样例输出:
02 刘唐 男 2303 张军 男 1901 李江 男 2104 王娜 女 19

03 张军 男 19


#include "stdio.h"#include "string.h"#include <algorithm>using namespace std;struct Student//用于表示学生个体的结构体{char no[1000];//学号char name[100];//姓名int age;//年龄char sex[5];//性别bool operator<(const Student &A)const//重载小于运算符使其能用sort函数排序{return strcmp(no,A.no)<0;}}buf[1000];int main(){int n,i,j;while(scanf("%d",&n)!=EOF){for(i=0;i<n;++i){scanf("%s%s%s%d",buf[i].no,buf[i].name,buf[i].sex,buf[i].age);}sort(buf,buf+n);//对数组排序使其按照学号升序排列int t;scanf("%d",&t);//对t组访问while(t--!=0){int ans = -1;//目标元素下标,初始化为-1char x[30];scanf("%s",x);//待查找学号int top = n-1,base = 0;//初始时,开始下标为0,结束下标n-1while(top>=base)//当查找子集不为空集时重复二分查找{int mid = (top+base)/2;int tmp = strcmp(buf[mid].no,x);//比较中间点学号与目标学号if(tmp == 0){ans = mid;break;//若相等,则查找完成跳出二分查找}else if(tmp>0)top = mid+1;elsebase = mid+1;}if(ans == -1){printf("No Answer!\n");}elseprintf("%s %s %s %d\n",buf[ans].no,buf[ans].name,buf[ans].sex,buf[ans].age);}}return 0;}
本题是利用二分查找

0 0
原创粉丝点击