题目大意:

按照给定规则,每个姓名都对应一个编号。要求在已知编号和所有姓名的条件下,输出编号所对应的姓名。

思路:

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