(个人水平有限,请见谅!)
题目描述:
继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 (“ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入描述:
第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出描述:
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
输入:
4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO
输出:
0
234
345
0345
代码示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int E=0, F=0, G=0, H=0, I=0, N=0, O=0, R=0, S=0, T=0, U=0, V=0, W=0, X=0, Z=0;
//E013357789,F45,G8,H38,I5689,N1799,O0124,R034,S67,T238,U4,V57,W2,X6,Z0
int num[10] = {0};
int test = 0;
string phoneavator = "", phone = "";
cin >> test;
for (int ii = 0; ii < test; ii++)
{
cin >> phoneavator;
for (int jj = 0; jj < phoneavator.length(); jj++)
{
switch(phoneavator[jj])
{
case 'E':
E++; break;
case 'F':
F++; break;
case 'G':
G++; break;
case 'H':
H++; break;
case 'I':
I++; break;
case 'N':
N++; break;
case 'O':
O++; break;
case 'R':
R++; break;
case 'S':
S++; break;
case 'T':
T++; break;
case 'U':
U++; break;
case 'V':
V++; break;
case 'W':
W++; break;
case 'X':
X++; break;
case 'Z':
Z++; break;
default:
cout << "error" << endl; break;
}
}
//cout<<E<<" "<<F<<" "<<G<<" "<<H<<" "<<I<<" "<<N<<" "<<O<<" "<<R<<" "<<S<<" "<<T<<" "<<U<<" "<<V<<" "<<W<<" "<<X<<" "<<endl;
num[0] = Z;
num[2] = W;
num[4] = U;
num[6] = X;
num[8] = G;
num[3] = H - G;
num[5] = F - U;
num[7] = S - X;
num[1] = O - Z - W - U;
num[9] = I + U - F - X - G;
for (int kk = 8; kk < 18; kk++)
{
int time = kk % 10;
char number = (kk + 2) % 10 + '0';
if(num[time] != 0)
{
phone.append(num[time], number);
}
}
cout << phone <<endl;
phone = "";
num[10] = {0};
E=0, F=0, G=0, H=0, I=0, N=0, O=0, R=0, S=0, T=0, U=0, V=0, W=0, X=0, Z=0;
}
}