小米2017秋招真题——电话号码分身问题(Java版)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小米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 }

 

以上是关于小米2017秋招真题——电话号码分身问题(Java版)的主要内容,如果未能解决你的问题,请参考以下文章

牛客网-公司真题-前端入门篇——小米秋招笔试-前端

Java程序员秋招面经大合集(BAT美团网易小米华为中兴等)

好未来2017秋招笔试真题二 --牛客网

集合(京东2017秋招真题)

采购单(京东2017秋招真题)

进制均值(京东2017秋招真题)