题目描述:继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替
("ZERO", "ONE", "TWO", "THREE", "FOUR",
"FIVE", "SIX", "SEVEN", "EIGHT", "NINE"),
然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
按照描述来说就是比如电话号码是1234,然后每个数字都加上8变成9012,然后9012使用对应的大写字母代替。
也就是(“NINE”, “ZERO”, “ONE”, “TWO”)。
然后这些字母会被打乱,所生成的字符串即为电话号码对应的分身。
因为顺序被打乱了,也不能识别单词,所以可以从每个字母的出现次数入手。
①可以先观察一下这十个单词,可以发现("ZERO", "TWO", "FOUR", "SIX", "EIGHT")都有自己独特的一个字母,分别是Z,W,U,X,G.
②所以统计这几个字母出现多少次就可以知道这个几个数字出现多少次了。
现在还剩下1,3,5,7,9的代表字母:
ONE中的三个字母:其中O在ZERO,TWO,FOUR中都有出现,N在SEVEN,NINE中出现,E在ZERO,THREE,FIVE,SEVEN,NINE出现。
比如假设现在一共找到n个O字母,因为Z字母可以表示0的个数,而0中有O字母,所以n个O里面要去掉0的O,假设Z字母有x个,也就是n-x。然后剩下的O都在TWO里面了,TWO可以用W字母表示,假设W字母有y个,那么属于ONE的O一共有个。
所以表示数字1的个数可以表示成:O-Z-W
③剩下的3,5,7,9也是同样的推理过程。
④所以总结下来是:
0 | Z |
1 | O-Z-W |
2 | W |
3 | H-G |
4 | U |
5 | F-U |
6 | X |
7 | S-X |
8 | G |
9 | I-F+U-X-G |
⑤分别对应输入中每行字符串对应的分身前的最小电话号码(所以可以从小到大输出)
参考的讨论组题解,修改了一下:(满足小米在线编程的题解)
a=input()
s=[]
for i in range(int(a)):
b=input()
s.append(b)
for element in s:
n0 = element.count('Z')
n2 = element.count('W')
n4 = element.count('U')
n6 = element.count('X')
n8 = element.count('G')
n1 = element.count('O') - n0 - n2
n3 = element.count('H') - n8
n5 = element.count('F') - n4
n7 = element.count('S') - n6
n9 = element.count('I') - n5 + n4 + n4 -n6 -n8
print('0' * n8 + '1' * n9 + '2' * n0 + '3' * n1 + '4' * n2 +'5' * n3 + '6' * n4 + '7' * n5 + '8' * n6 + '9' * n7 )