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 }