本文主要是介绍一道 小米 校招题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
继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~ 下次再见
这篇关于一道 小米 校招题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!