1. 程式人生 > >小米2017秋招真題——電話號碼分身問題(Java版)

小米2017秋招真題——電話號碼分身問題(Java版)

imp spa ray 描述 mov lose port next can

原題描述如下:

技術分享

通過對各個數字對應的英文單詞的分析,可以發現一些規律:

字母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 }

小米2017秋招真題——電話號碼分身問題(Java版)