小米2017秋招真题——电话号码分身问题(Java版)
原题描述如下:
通过对各个数字对应的英文单词的分析,可以发现一些规律:
字母Z为0独占,字母W为2独占,字母U为4独占,字母X为6独占,字母G为8独占;
在过滤一遍0、2、4、6、8后,字母O为1独占,字母H为3独占,字母F为5独占,字母S为7独占;
再次过滤0、1、2、3、4、5、6、7、8后,剩下的I则只为9独占。
因此,基于以上规律,编写如下处理代码:(Java版)
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.List; 4 import java.util.Scanner; 5 6 public class MiNumber { 7 8 public static void main(String[] args) { 9 Scanner in = new Scanner(System.in); 10 int n = in.nextInt(); 11 String[] arr = new String[n]; 12 in.nextLine(); //先调用一次nextLine(),将该行剩下的内容抛弃 13 for(int i=0;i<n;i++) 14 arr[i] = in.nextLine(); 15 16 getResult(n,arr); 17 in.close(); 18 } 19 20 public static void getResult(int n,String[] arr){ 21 for(int i=0;i<n;i++){ 22 List<String> numberC = new ArrayList<String>(arr[i].length()); 23 for(int j=0;j<arr[i].length();j++) 24 numberC.add(arr[i].charAt(j)+""); 25 getNumber(numberC); 26 numberC = null; 27 } 28 } 29 30 public static void getNumber(List<String> numberC){ 31 StringBuilder sb = new StringBuilder(); 32 if(numberC.size()>=4&&numberC.contains("Z")){ //字母Z为0独占 33 sb.append("2"); //2+8 =10,取个位0,是最小的那个数字 34 numberC.remove("Z"); 35 numberC.remove("E"); 36 numberC.remove("R"); 37 numberC.remove("O"); 38 } 39 if(numberC.size()>=3&&numberC.contains("W")){ //字母W为2独占 40 sb.append("4"); //4+8 =12,取个位2,是最小的那个数字 41 numberC.remove("T"); 42 numberC.remove("W"); 43 numberC.remove("O"); 44 } 45 if(numberC.size()>=4&&numberC.contains("U")){ //字母U为4独占 46 sb.append("6"); //6+8 =14,取个位4,是最小的那个数字 47 numberC.remove("F"); 48 numberC.remove("O"); 49 numberC.remove("U"); 50 numberC.remove("R"); 51 } 52 if(numberC.size()>=3&&numberC.contains("X")){ //字母X为6独占 53 sb.append("8"); //8+8 =16,取个位6,是最小的那个数字 54 numberC.remove("S"); 55 numberC.remove("I"); 56 numberC.remove("X"); 57 } 58 if(numberC.size()>=5&&numberC.contains("G")){ //字母G为8独占 59 sb.append("0"); //0+8 =8,取个位8,是最小的那个数字 60 numberC.remove("E"); 61 numberC.remove("I"); 62 numberC.remove("G"); 63 numberC.remove("H"); 64 numberC.remove("T"); 65 } 66 if(numberC.size()>=3&&numberC.contains("O")){ //字母O为1排除0,2,4,6,8后独占 67 sb.append("3"); //3+8 =11,取个位1,是最小的那个数字 68 numberC.remove("O"); 69 numberC.remove("N"); 70 numberC.remove("E"); 71 } 72 if(numberC.size()>=5&&numberC.contains("H")){ //字母H为3排除0,2,4,6,8后独占 73 sb.append("5"); //3+8 =11,取个位1,是最小的那个数字 74 numberC.remove("T"); 75 numberC.remove("H"); 76 numberC.remove("R"); 77 numberC.remove("E"); 78 numberC.remove("E"); 79 } 80 if(numberC.size()>=4&&numberC.contains("F")){ //字母F为5排除0,2,4,6,8后独占 81 sb.append("7"); //7+8 =15,取个位5,是最小的那个数字 82 numberC.remove("F"); 83 numberC.remove("I"); 84 numberC.remove("V"); 85 numberC.remove("E"); 86 } 87 if(numberC.size()>=5&&numberC.contains("S")){ //字母F为7排除0,2,4,6,8后独占 88 sb.append("9"); //9+8 =17,取个位7,是最小的那个数字 89 numberC.remove("S"); 90 numberC.remove("E"); 91 numberC.remove("V"); 92 numberC.remove("E"); 93 numberC.remove("N"); 94 } 95 if(numberC.size()>=4&&numberC.contains("I")){ //字母F为7排除0,2,4,6,8后独占 96 sb.append("1"); //1+8 =9,取个位9,是最小的那个数字 97 numberC.remove("N"); 98 numberC.remove("I"); 99 numberC.remove("N"); 100 numberC.remove("E"); 101 } 102 103 String strN = sb.toString(); 104 char[] cr = strN.toCharArray(); 105 Arrays.sort(cr); 106 String result = String.valueOf(cr); 107 108 System.out.println(result); 109 } 110 111 }