题目大意:
按照给定规则,每个姓名都对应一个编号。要求在已知编号和所有姓名的条件下,输出编号所对应的姓名。
思路:
用stl模拟即可。
代码:
/* ID: lujunda1 LANG: C++ PROG: namenum */ #include<iostream> #include<stdio.h> #include<cstring> #include<cstdio> #include<stdlib.h> #include<map> #include<vector> using namespace std; //建立数字对应姓名的map型变量 //考虑到一个数字可能对应多个名字,所以要用到动态数组。 map< string , vector<string> > num_name; //将每个字母对应到数字上。注意‘Q’与‘Z’没有出现在题干中,相应位置补上任意数字即可。 int char_num[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9}; //将“dict.txt”文件中的姓名与其相应的编号在num_name型变量上建立对应关系。 void get_num_name() { freopen("dict.txt","r",stdin); char name[20],num[20]; while(~scanf("%s",&name)) { int len=strlen(name); for(int i=0;i<len;i++) num[i]=char_num[name[i]-'A']+'0'; num[len]='\0'; //将字符串转换为string类型的变量 string temp_name=name,temp_num=num; num_name[temp_num].push_back(temp_name); } } int main() { get_num_name(); freopen("namenum.in","r",stdin); freopen("namenum.out","w",stdout); char num[20]; scanf("%s",&num); string temp_num=num; //total用于存储数字对应姓名的数量 int total=num_name[temp_num].size(); if(total) for(int i=0;i<total;i++) printf("%s\n",num_name[temp_num][i].c_str()); else printf("NONE\n"); }