【牛客网】电话号码分身

题目描述

继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。

输入描述:

第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。

输出描述:

输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
示例1

输入

4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO

输出

0
234
345

0345

【牛客网】电话号码分身_第1张图片

#include
#include
#include
#include
#include
#include
#include
using namespace std;
mapm;//每个字母出现次数
 mapm2;//每个数字出现次数 
 int a[15];//记录出现过的数,还原之后的数 
int main(){
	int t;
	string s;
	scanf("%d",&t);
	char c[14]={'E','F','G','H','I','N','O','S','Z','W','T','X','V','R'};//所有可能出现的字母 
	while(t--){
		for(int i=0;i<14;i++)
		m[c[i]]=0;//初始化 
	    cin>>s;
		for(int i=0;i0){
			++count;
			a[count]=i;
			if(i==8)
			a[count]=0;
			else if(i==9)
			a[count]=1;
			else
			a[count]=i+10-8;
		}
		else continue;	
	}

	sort(a+1,a+count+1);
	int sum;
	for(int i=1;i<=count;i++){
		if(a[i]==0)//注意还原成原来给的数 
		sum=8;
		else if(a[i]==1)
		sum=9;
		else
		sum=a[i]+8-10;
		for(int j=1;j<=m2[sum];j++)//出现多少次就输出多少次 
			printf("%d",a[i]);
	}	printf("\n");
	}
	return 0;
}


你可能感兴趣的:(技巧性)