题目描述
继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入描述
第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出描述:
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
示例1
示例1
输入
4 EIGHT ZEROTWOONE OHWETENRTEO OHEWTIEGTHENRTEO
输出
0 234 345 0345
思路:
观察("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE") 有的字母只在一个单词中出现,比如ZERO,TWO,FOUR,SIX,EIGHT 有点字母在两个或两个以上单词中出现,比如THREE中的H就在THREE和EIGHT中出现 那么只需要统计字母出现的频次就可以计算出每个单词的频次 最后反向计算出原始数字即可import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int row = sc.nextInt(); sc.nextLine(); while (row != 0) { String s = sc.nextLine(); s = s.replace(" ", ""); int[] cache = new int[26]; char[] cs = s.toCharArray(); for (char c : cs) { cache[c - 'A']++; } int[] res = new int[10]; res[0] = cache['Z' - 'A']; res[2] = cache['W' - 'A']; res[4] = cache['U' - 'A']; res[6] = cache['X' - 'A']; res[8] = cache['G' - 'A']; res[1] = cache['O' - 'A'] - res[2] - res[4] - res[0]; res[3] = cache['H' - 'A'] - res[8]; res[5] = cache['F' - 'A'] - res[4]; res[7] = cache['S' - 'A'] - res[6]; res[9] = cache['I' - 'A'] - res[6] - res[5] - res[8]; StringBuilder sb = new StringBuilder(""); for (int i = 0; i <= 9; i++) { while (res[(i + 8) % 10] > 0) { sb.append(i); res[(i + 8) % 10]--; } } System.out.println(sb); row--; } }}