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