题目描述:首先将电话号码中的每个数字加上8然后取个位,然后使用对应的大写字母代替(“ONE”,“TWO”,“THREE”,“FOUR”,“FIVE”,“SIX”,“SEVEN”,“EIGHT”,“NINE”),然后随机打乱这些字母,所生产的字符串即为电话号码对应的分身。
输入:第一行为一个整数T,接下来T行,每行给定一个分身后的电话号码
输出:输出T行,分别对应输入中每行对应分身前的最小电话号码(允许有前导0)
程序:
<span style="font-size:18px;">#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<string> svec;
svec.push_back("ZERO");
svec.push_back("ONE");
svec.push_back("TWO");
svec.push_back("THREE");
svec.push_back("FOUR");
svec.push_back("FIVE");
svec.push_back("SIX");
svec.push_back("SEVEN");
svec.push_back("EIGHT");
svec.push_back("NINE");
string str;
vector<string> strout;
vector<string> strin;
int n;
while(cin>>n){
strout.clear();
strin.clear();
for(int k=0;k<n;k++){cin>>str;strin.push_back(str);}
for(int k=0;k<n;k++){
str=strin[k];
//求出输入字符串中字母的个数统计
int b[26];
for(int i=0;i<26;i++){b[i]=0;}
for(int i=0;i<str.size();i++){
b[str[i]-'A']++;
}
//计算编码后0...9个数
int x1[10]={0,2,4,6,7,5,3,1,8,9};
char dict1[10]={'Z','W','U','X','S','F','R','O','T','E'};
int x[10],ii;
for(int i=0;i<10;i++){x[i]=0;}
for(int i=0;i<10;i++){
ii=x1[i];
x[ii]=b[dict1[i]-'A'];
for(int i=0;i<svec[ii].size();i++){
b[svec[ii][i]-'A']-=x[ii];
}
}
//计算编码前0...9个数
int num[10];
for(int i=0;i<10;i++){num[i]=0;}
num[0]=x[8];
num[1]=x[9];
string temp;
for(int i=0;i<8;i++){num[2+i]=x[i];}
for(int i=0;i<10;i++){
for(int j=0;j<num[i];j++){temp.push_back(i+'0');}
}
strout.push_back(temp);
}
for(int i=0;i<n;i++){cout<<strout[i]<<endl;}
}
return 0;
}</span>
样例输入:
4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO
样例输出:
0
234
345
0345
版权声明:本文为klliu_control原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。