编程题 电话号码分身

  • Post author:
  • Post category:其他

题目描述:首先将电话号码中的每个数字加上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 版权协议,转载请附上原文出处链接和本声明。