newcoder在线编程3--电话号码分身

题目描述
继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;
}

代码是别人的,这里做个解析。

猜你喜欢

转载自blog.csdn.net/liushui94/article/details/78705249