练习题四:电话号码分身

题目描述

继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。

输入描述:

第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。

输出描述:

输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。

Python解法:

# -*- coding:utf-8 -*-
"""
电话号码分身
字母-代表数字-加8前表示数字
G-8-0, I-9-1, Z-0-2, O-1-3, W-2-4, R-3-5, U-4-6, F-5-7, X-6-8, S-7-9
统计拥有的字母数量,然后可以找到规律.只有0(ZERO)有字母Z,也就是说,有多少个Z就有多少个0。
同理,只有2有字母W,4有字母U,6有字母X,8有字母G。
将上述单词从字母统计中删去,发现剩下的单词中,只有5有字母F,1有字母O,3有字母R,7有字母S。
再删去,发现只有9有字母I。将以上数字统计后排序可得
"""
import sys


def originalDigits(s):
result = [0] * 10
result[2] = s.count("Z")
result[4] = s.count("W")
result[6] = s.count("U")
result[8] = s.count("X")
result[9] = s.count("S") - result[8]
result[7] = s.count("V") - result[9]
result[3] = s.count("O") - result[2] - result[6] - result[4]
result[1] = (s.count("N") - result[3] - result[9]) // 2
result[0] = s.count("I") - result[7] - result[8] - result[1]
result[5] = s.count("H") - result[0]
data = ""
for i, j in enumerate(result):
data += j * str(i)
return data


if __name__ == '__main__':
n = int(sys.stdin.readline().strip())
for i in range(n):
print(originalDigits(sys.stdin.readline().strip()))

 

猜你喜欢

转载自www.cnblogs.com/HwyStudy/p/9130784.html