一道 小米 校招题

题目描述:

继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

看完题目,飞快地动笔,有了点思路,随后就敲代码,然后就AC了(开心),就像解密一样,真的很有趣。

通过题目我们能很快地了解到我们输入的字母是加了8之后的字母,并且通过分析0-9的大写英文字母我们可以得到有些单词拥有独有的字母,就表明这些单词是已知的,我们只要看到有这个字母,就表明者个字符串里面有这个单词,再通过分析,我们可以知道,其余的未知数字单词,我们可以通过已知的数字单词求出,加 8 之后对应的数字以及某数字单词独有字母如下和可由已知得到未知如下:

0    8                      独特单词 ---   ZERO        Z         已知求未知 ---   F: FOUR(已知) 求 FIVE 

1    9                            5个          ONE                             5个             H:EIGHT(已知) 求 THREE

2    10                                          TWO         W                                  S:SIX(已知) 求 SEVEN

3    11                                           THREE                                          O:FOUR(已知) TWO(已知) ZERO(已知) 求 ONE

4    12                                           FOUR       U                                   I:FIVE(未变已) SIX(已知) EIGHT(已知) 求 NINE

5    13                                           FIVE

6    14                                           SIX            X

7    15                                           SEVEN 

8    16                                           EIGHT       G

9    17                                           NINE 

这样我们就可以把 分身电话号码给求出来啦! 是不是很有意思?是时候上代码了 ---

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
    int n;
    string s;
    scanf("%d",&n);
    int a[10];
    for(int i=1;i<=n;i++)
    {
    	for(int i=0;i<10;i++)
    		a[i]=0;
        cin>>s;
        for(int j=0;j<s.size();j++)//检测每个字母 有标记字母的则对应数组下标 自增
        {
            if(s[j]=='Z')    {a[2]++;    continue;}
            if(s[j]=='W')    {a[4]++;    continue;}
            if(s[j]=='U')    {a[6]++;    continue;}
            if(s[j]=='X')    {a[8]++;    continue;}
            if(s[j]=='G')    {a[0]++;    continue;}
            if(s[j]=='F')    {a[7]++;    continue;}
            if(s[j]=='H')    {a[5]++;    continue;}
            if(s[j]=='S')    {a[9]++;    continue;}
            if(s[j]=='O')    {a[3]++;    continue;}
            if(s[j]=='I')    {a[1]++;    continue;}
        }
        if(a[7]>0)
        a[7] -= a[6];    //减去已知的 下面同理
        if(a[5]>0)
        a[5] -= a[0];
        if(a[9]>0)
        a[9] -= a[8];
        if(a[3]>0)
        a[3] = a[3]-a[2]-a[4]-a[6];
        if(a[1]>0)
        a[1] = a[1]-a[0]-a[7]-a[8];
        for(int k=0;k<10;k++)//打印
        {
        	if(a[k]==0)	continue;
        	while(a[k]>0)
        	{	
        		printf("%d",k);
				a[k]--; 
			}
                
        }
        printf("\n");
    }
}

 

 bye~ 下次再见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值