用到了map映射,map中关键字为int学号,映射值为string其他信息;
本题示例的输出格式与测试的输出格式不同,有点坑,输出时%d前不需要加0才能通过
#include <map> #include <cstdio> #include <string> #include <iostream> using namespace std; int main(){ int n,m; map<int,string> mymap;//定义要使用的map,学号为关键字,其他信息为映射值 while(scanf("%d",&n)!=EOF){ for(int i = 0;i<n;i++){ //每行先读入学号,遇空格停止,cin忽略前面的空格 int stunum; //cin不对后面的分隔符做处理,因此我猜后面用getline时会自动忽略前面的分隔符 cin>>stunum; //scanf("%d",&stunum); string str; getline(cin,str); mymap[stunum] = str; //用“下标”的方式给map添加新元素 } scanf("%d",&m); for(int j = 0;j < m;j++){ int searchnum; scanf("%d",&searchnum); if(mymap.find(searchnum)!=mymap.end()){//注意在map中查找的写法 if(searchnum<10){ //看示例后原本以为学号<10时要前面加0,但是测试用例中不需要加0,坑人 printf("%d%s\n",searchnum,mymap[searchnum].c_str()); } else{ printf("%d%s\n",searchnum,mymap[searchnum].c_str()); } } else{ printf("No Answer!\n"); } } } }