Algorithm Design Everyday——2.查找学生信息

  1 /**
  2 题目描述: 
  3 输入N个学生的信息,然后进行查询。
  4 
  5 输入:
  6 输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息格式如下: 
  7 01 李江 男 21 
  8 02 刘唐 男 23 
  9 03 张军 男 19 
 10 04 王娜 女 19 
 11 然后输入一个M(M<=10000),接下来会有 M 行,代表 M 次查询,每行输入 一个学号,格式如下: 
 12 02 
 13 03 
 14 01 
 15 04
 16 
 17 输出:
 18 输出M行,每行包括一个对应于查询的学生的信息。 如果没有对应的学生信息,则输出“No Answer!”
 19 
 20 样例输入:
 21 4
 22 01 李江 男 21 
 23 02 刘唐 男 23 
 24 03 张军 男 19 
 25 04 王娜 女 19 
 26 5
 27 02 
 28 03 
 29 01 
 30 04 
 31 03
 32 样例输出: 
 33 02 刘唐 男 23 
 34 03 张军 男 19 
 35 01 李江 男 21 
 36 04 王娜 女 19
 37 03 张军 男 19
 38 */
 39 #include<cstdio>
 40 #include<algorithm>
 41 #include<cstring>
 42 #include<cstdlib>
 43 using namespace std;
 44 
 45 struct Student
 46 {
 47     char no[100];
 48     char name[100];
 49     char sex[5];
 50     int age;
 51 
 52     bool operator < (const Student &A) const
 53     {
 54         return strcmp(no, A.no) < 0;
 55     }
 56 }buf[1000];
 57 
 58 int main()
 59 {
 60     int n;
 61     while(scanf_s("%d", &n, 1) != EOF)
 62     {
 63         for(int i = 0 ; i < n ; i ++)
 64             scanf_s("%s%s%s%d", buf[i].no, _countof(buf[i].no), buf[i].name, _countof(buf[i].name), 
 65             buf[i].sex, _countof(buf[i].sex), &buf[i].age, 1);
 66 
 67         sort(buf, buf + n);
 68 
 69         int t;
 70         scanf_s("%d", &t, 1);
 71         while(t -- != 0)
 72         {
 73             int ans = -1;
 74             char x[30];
 75             scanf_s("%s", x, _countof(x));
 76 
 77             int top = n - 1, base = 0;
 78             while(top >= base)
 79             {
 80                 int mid = (top + base) / 2;
 81                 int tmp = strcmp(buf[mid].no, x);
 82                 if(tmp == 0)
 83                 {
 84                     ans = mid;
 85                     break;
 86                 }
 87                 else if(tmp > 0)
 88                     top = mid - 1;
 89                 else
 90                     base = mid + 1;
 91             }
 92             if(ans == -1)
 93                 printf_s("No answer!
");
 94             else
 95                 printf_s("%s %s %s %d
", buf[ans].no, buf[ans].name, buf[ans].sex, buf[ans].age);
 96         }
 97     }
 98 
 99     return 0;
100 }
原文地址:https://www.cnblogs.com/yiyi-xuechen/p/3452312.html