题目描述
继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
代码:
#include<iostream>
using namespace std;
int main(){
int T;
char mas[10] = {'G', 'I', 'Z', 'O', 'W', 'R', 'U', 'F', 'X', 'S'};
//G:8 , I:5,6,8,9 , Z:0 , O:0,1,2,4 , W:2 , R:0,3,4 , U:4 , F:4,5 , X:6 , S:7
//对应关系
//8-0 9-1 0-2 1-3 2-4 3-5 4-6 5-7 6-8 7-9
while(cin >> T){
for(int i = 0; i < T; i ++)
{
string tel;
cin >> tel;
int count[10] ={0}; // 记录原来的号码出现的次数 count[0]表示数字0出现的次数
for(int j = 0; j < tel.length(); j++)
{
for(int z = 0; z < 10; z++)
{
if(tel[j] == mas[z]) count[z]++;
}
}
count[3] = count[3] - count[2] - count[4] - count[6];
count[5] = count[5] - count[2] - count[6];
count[7] = count[7] - count[6];
count[9] = count[9] - count[8];
count[1] = count[1] - count[7] - count[8] - count[0];
for(int i = 0; i < 10; i++) /
{
for(int j = 0; j < count[i]; j++)
{
cout << i;
}
}
cout << endl;
}
}
return 0;
}
代码是别人的,这里做个解析。