2017-小米-电话号码分身
题目描述
继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
只有0(ZERO)有字母Z,也就是说,有多少个Z就有多少个0。同理,只有2有字母W,4有字母U,6有字母X,8有字母G。只有6和7有字母S,S的个数减去6的个数为7的个数。
同理,只有5和7有V等等。计算数字个数如下:
def originalDigits(s): result = [0] * 10 result[0] = s.count("Z") result[2] = s.count("W") result[4] = s.count("U") result[6] = s.count("X") result[7] = s.count("S") - result[6] result[5] = s.count("V") - result[7] result[1] = s.count("O") - result[0] - result[4] - result[2] result[9] = (s.count("N") - result[1] - result[7]) // 2 result[8] = s.count("I") - result[5] - result[6] - result[9] result[3] = s.count("H") - result[8] t, resStr = "", "" for i, r in enumerate(result): t += r * str(i) # 将所有数字排成一排 for i in t: # 减8逆推回原数字,resStr为原数字 if int(i) >= 8: resStr += str(int(i) - 8) else: resStr += str(int(i) + 10 - 8) return ''.join(sorted(resStr)) #原数字排序后(返回列表)jion为字符串 if __name__ == '__main__': N = int(input()) for i in range(N): strNumber = input() print(originalDigits(strNumber))