用到了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");
}
}
}
}

京公网安备 11010502036488号