華爲校園招聘上機試題Java實現(一)

找工作時華爲會考上機題目,如果用Java語言,這裏總結如下注意事項:

關於輸入輸出,注意掌握Scanner類

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package study.edu.main;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.util.Scanner;  
  6.   
  7. public class Main {  
  8.     /** 
  9.      *  示例輸入:di yi hang 回車 number 1 回車  di san hang 回車  
  10.      */  
  11.     public static void main(String[] args) throws Exception {  
  12.         @SuppressWarnings("resource")  
  13.         Scanner in = new Scanner(System.in);  
  14.         String a = in.nextLine();  
  15.         // 按行讀取,可讀取帶空格的字符串,回車表示輸入  
  16.         System.out.println(a);  
  17.   
  18.         String b = in.next();  
  19.         System.out.println(b); // 空格被作爲間隔,讀取一個字符串  
  20.         System.out.println(in.nextInt());  
  21.   
  22.         BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));  
  23.               // 可以讀取帶空格的字符串  
  24.         System.out.println(bf.readLine());  
  25.     }  
  26.   
  27. }  

題目1: 最具夫妻相

在中國,形容夫妻恩愛的詞彙中,大家用的比較多的就是“夫妻相”。所謂“夫妻相”,就是兩個人看上去比較般配,長相、身材等某些方面有一定的相似度。本題則另闢蹊徑,從人的姓名維度,以字母重複個數來尋找最具“夫妻相”的人。題目中預先給定一組女士的姓名拼音。輸入男士的姓名拼音(拼音中間可以有空格,字母全部小寫),依預先給定姓名拼音的先後遍歷所有姓名,輸出字母重複數最多的女士姓名。
規則1:如果字母重複數最多的女士有多位相同,則以最先匹配的女士做爲最具“夫妻相”的人選。
規則2:人名中的相同字母,按重複一次處理。例如:li ling 與li lei 重複的字符個數爲2,而不是4。

預置女士名單(先後循序必須保證):  "wang fei","zhang man yu","zhang zhi yi","li li","li xiao man","li yu cun","yang ni","xiao tong","li lei","zhang san"

輸入: 輸入一個男士姓名,字符串  ,輸出: 輸出最具“夫妻相”的女士姓名

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package study.edu.main;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Iterator;  
  5. import java.util.Scanner;  
  6. import java.util.Set;  
  7.   
  8. public class Main {  
  9.   
  10.     public static String[] girls = { "wang fei""zhang man yu",  
  11.             "zhang zhi yi""li li""li xiao man""li yu cun""yang ni",  
  12.             "xiao tong""li lei""zhang san" };  
  13.   
  14.     public static void main(String[] args) throws Exception {  
  15.         String man;  
  16.         @SuppressWarnings("resource")  
  17.         Scanner scan = new Scanner(System.in);  
  18.         man = scan.nextLine(); // 可以讀取帶空格的字符串,回車時讀取  
  19.         String matchGril;  
  20.         matchGril = match(man);  
  21.         System.out.println(matchGril);  
  22.   
  23.     }  
  24.   
  25.     /** 
  26.      * 返回最佳匹配的女孩,從girls數組裏 
  27.      */  
  28.     private static String match(String str) {  
  29.         str = removeRepeatChar(str);  
  30.         int num = 0;  
  31.         String woman = null;  
  32.         int index = 0;  
  33.         int tempNum = 0;  
  34.         for (int i = 0; i < girls.length; i++) {  
  35.             woman = removeRepeatChar(girls[i]);  
  36.             tempNum = match(str, woman);  
  37.             if (tempNum > num) {  
  38.                 num = tempNum;  
  39.                 index = i;  
  40.             }  
  41.   
  42.         }  
  43.   
  44.         return girls[index];  
  45.     }  
  46.   
  47.     /** 
  48.      * 匹配字符串相同字母個數 
  49.      */  
  50.     private static int match(String man, String woman) {  
  51.         char[] men = man.toCharArray();  
  52.         char[] women = woman.toCharArray();  
  53.         int count = 0;  
  54.         for (char mm : men) {  
  55.             for (char ww : women) {  
  56.                 if (mm == ww) {  
  57.                     count++;  
  58.                 }  
  59.             }  
  60.         }  
  61.         return count;  
  62.     }  
  63.   
  64.     /** 
  65.      * 去除重複的字符串,使用Set集合 
  66.      */  
  67.     private static String removeRepeatChar(String man) {  
  68.         char[] chs = man.toCharArray();  
  69.         Set<Character> chsSet = new HashSet<Character>();  
  70.         for (char ch : chs) {  
  71.             if (ch > 'a' && ch < 'z') {  
  72.                 chsSet.add(ch);  
  73.             }  
  74.         }  
  75.         Iterator<Character> it = chsSet.iterator();  
  76.         String str = "";  
  77.         while (it.hasNext()) {  
  78.             str += it.next().toString();  
  79.         }  
  80.         return str;  
  81.     }  
  82.   
  83. }  

題目2: 統計字符串中各字母出現的次數

統計字符串中各字母出現的次數,並按照規定格式和 自然順序 輸出給定字符串:"asdfdfdassssddf" ,輸出:a:2 d:5 f:3 s:5 
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package study.edu.main;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.Map;  
  5. import java.util.Set;  
  6. import java.util.TreeMap;  
  7.   
  8. public class MainMap {  
  9.   
  10.     public static void main(String[] args) {  
  11.         String a = "asdfdfdassssddf";  
  12.         String str = check(a);  
  13.         System.out.println(str);  
  14.   
  15.     }  
  16.   
  17.     private static String check(String a) {  
  18.         Map<Character, Integer> me = new TreeMap<Character, Integer>();  
  19.         // TreeMap 有序, 統計字母的出現順序,並按照規定順序格式輸出  
  20.                 //如果不要求排序,按照原來的插入順序,則使用LinkedHashMap  
  21.         char[] chs = a.toCharArray();  
  22.           
  23.         int count = 0;   //核心業務邏輯  
  24.         for (int i = 0; i < chs.length; i++) {  
  25.             Integer value = me.get(chs[i]);   // 當map中沒有key時,get(key)會返回null  
  26.             if (value != null)  
  27.                 count = value;  
  28.             count++;  
  29.             me.put(chs[i], count);  
  30.             count = 0;  
  31.         }  
  32.           
  33.         StringBuilder stringBuilder = new StringBuilder();  
  34.         Set<Character> se = me.keySet();  
  35.         Iterator<Character> it = se.iterator();  
  36.         while(it.hasNext()){  
  37.             Character ch = it.next();  
  38.             Integer in = me.get(ch);  
  39.             stringBuilder.append(ch+":"+in+" ");  
  40.         }  
  41.         return stringBuilder.toString();  
  42.           
  43.     }  
  44. }  

題目3:  顯示電池電量

手機電池餘量的問題,描述: 自從有了智能手機,時刻都要關心手機的電量。你的任務很簡單,用程序打印符號來表示當前手機的電量,用10行和10列來表示電池的電量,同時在外圍加上邊框,每一行表示10%的電量,假設還有60%的電量,則顯示如下:

+----------+
|----------|
|----------|
|----------|
|----------|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
+----------+

輸入:多組測試數據,第一行爲測試數據組數N(N<10),緊接着是N行,每行一個數,表示電量,這個數值可能是0,10,20 ,30,40,50,60,70,80,90,100

輸出:輸出: 每組數據輸出一個電池的電量,每組數據之間用15個“=”隔開

樣例輸入:2 回車 50 回車 0

代碼:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package study.edu.main;  
  2.   
  3. import java.util.Scanner;  
  4.   
  5. public class Main {  
  6.   
  7.     public static void main(String[] args) {  
  8.         int n;  
  9.         @SuppressWarnings("resource")  
  10.         Scanner scan = new Scanner(System.in);   
  11.         n = scan.nextInt();  
  12.         int[] intArray = new int[n];  
  13.         for (int i = 0; i < n; i++) {  
  14.             intArray[i] = scan.nextInt();  
  15.         }  
  16.   
  17.         print(intArray, n);  
  18.   
  19.     }  
  20.   
  21.     private static void print(int[] intArray, int n) {  
  22.         String str1 = "+----------+";  
  23.         String str2 = "|----------|";  
  24.         String str3 = "|++++++++++|";  
  25.         String str4 = "===============";  
  26.   
  27.         for (int i = 0; i < n; i++) {  
  28.             int power = intArray[i] / 10;  
  29.             System.out.println(str1);  
  30.             for (int j = 0; j < 10 - power; j++) {  
  31.                 System.out.println(str2);  
  32.             }  
  33.             for (int k = 0; k < power; k++) {  
  34.                 System.out.println(str3);  
  35.             }  
  36.             System.out.println(str1);  
  37.             if (i < n - 1)  
  38.                 System.out.println(str4);  
  39.         }  
  40.   
  41.     }  
  42.   
  43. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章