找工作時華爲會考上機題目,如果用Java語言,這裏總結如下注意事項:
關於輸入輸出,注意掌握Scanner類
- package study.edu.main;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.util.Scanner;
- public class Main {
- /**
- * 示例輸入:di yi hang 回車 number 1 回車 di san hang 回車
- */
- public static void main(String[] args) throws Exception {
- @SuppressWarnings("resource")
- Scanner in = new Scanner(System.in);
- String a = in.nextLine();
- // 按行讀取,可讀取帶空格的字符串,回車表示輸入
- System.out.println(a);
- String b = in.next();
- System.out.println(b); // 空格被作爲間隔,讀取一個字符串
- System.out.println(in.nextInt());
- BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
- // 可以讀取帶空格的字符串
- System.out.println(bf.readLine());
- }
- }
題目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"
輸入: 輸入一個男士姓名,字符串 ,輸出: 輸出最具“夫妻相”的女士姓名
- package study.edu.main;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Scanner;
- import java.util.Set;
- public class Main {
- public static String[] girls = { "wang fei", "zhang man yu",
- "zhang zhi yi", "li li", "li xiao man", "li yu cun", "yang ni",
- "xiao tong", "li lei", "zhang san" };
- public static void main(String[] args) throws Exception {
- String man;
- @SuppressWarnings("resource")
- Scanner scan = new Scanner(System.in);
- man = scan.nextLine(); // 可以讀取帶空格的字符串,回車時讀取
- String matchGril;
- matchGril = match(man);
- System.out.println(matchGril);
- }
- /**
- * 返回最佳匹配的女孩,從girls數組裏
- */
- private static String match(String str) {
- str = removeRepeatChar(str);
- int num = 0;
- String woman = null;
- int index = 0;
- int tempNum = 0;
- for (int i = 0; i < girls.length; i++) {
- woman = removeRepeatChar(girls[i]);
- tempNum = match(str, woman);
- if (tempNum > num) {
- num = tempNum;
- index = i;
- }
- }
- return girls[index];
- }
- /**
- * 匹配字符串相同字母個數
- */
- private static int match(String man, String woman) {
- char[] men = man.toCharArray();
- char[] women = woman.toCharArray();
- int count = 0;
- for (char mm : men) {
- for (char ww : women) {
- if (mm == ww) {
- count++;
- }
- }
- }
- return count;
- }
- /**
- * 去除重複的字符串,使用Set集合
- */
- private static String removeRepeatChar(String man) {
- char[] chs = man.toCharArray();
- Set<Character> chsSet = new HashSet<Character>();
- for (char ch : chs) {
- if (ch > 'a' && ch < 'z') {
- chsSet.add(ch);
- }
- }
- Iterator<Character> it = chsSet.iterator();
- String str = "";
- while (it.hasNext()) {
- str += it.next().toString();
- }
- return str;
- }
- }
題目2: 統計字符串中各字母出現的次數
- package study.edu.main;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeMap;
- public class MainMap {
- public static void main(String[] args) {
- String a = "asdfdfdassssddf";
- String str = check(a);
- System.out.println(str);
- }
- private static String check(String a) {
- Map<Character, Integer> me = new TreeMap<Character, Integer>();
- // TreeMap 有序, 統計字母的出現順序,並按照規定順序格式輸出
- //如果不要求排序,按照原來的插入順序,則使用LinkedHashMap
- char[] chs = a.toCharArray();
- int count = 0; //核心業務邏輯
- for (int i = 0; i < chs.length; i++) {
- Integer value = me.get(chs[i]); // 當map中沒有key時,get(key)會返回null
- if (value != null)
- count = value;
- count++;
- me.put(chs[i], count);
- count = 0;
- }
- StringBuilder stringBuilder = new StringBuilder();
- Set<Character> se = me.keySet();
- Iterator<Character> it = se.iterator();
- while(it.hasNext()){
- Character ch = it.next();
- Integer in = me.get(ch);
- stringBuilder.append(ch+":"+in+" ");
- }
- return stringBuilder.toString();
- }
- }
題目3: 顯示電池電量
手機電池餘量的問題,描述: 自從有了智能手機,時刻都要關心手機的電量。你的任務很簡單,用程序打印符號來表示當前手機的電量,用10行和10列來表示電池的電量,同時在外圍加上邊框,每一行表示10%的電量,假設還有60%的電量,則顯示如下:
+----------+
|----------|
|----------|
|----------|
|----------|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
|++++++++++|
+----------+
輸入:多組測試數據,第一行爲測試數據組數N(N<10),緊接着是N行,每行一個數,表示電量,這個數值可能是0,10,20 ,30,40,50,60,70,80,90,100
輸出:輸出: 每組數據輸出一個電池的電量,每組數據之間用15個“=”隔開
樣例輸入:2 回車 50 回車 0
代碼:
- package study.edu.main;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- int n;
- @SuppressWarnings("resource")
- Scanner scan = new Scanner(System.in);
- n = scan.nextInt();
- int[] intArray = new int[n];
- for (int i = 0; i < n; i++) {
- intArray[i] = scan.nextInt();
- }
- print(intArray, n);
- }
- private static void print(int[] intArray, int n) {
- String str1 = "+----------+";
- String str2 = "|----------|";
- String str3 = "|++++++++++|";
- String str4 = "===============";
- for (int i = 0; i < n; i++) {
- int power = intArray[i] / 10;
- System.out.println(str1);
- for (int j = 0; j < 10 - power; j++) {
- System.out.println(str2);
- }
- for (int k = 0; k < power; k++) {
- System.out.println(str3);
- }
- System.out.println(str1);
- if (i < n - 1)
- System.out.println(str4);
- }
- }
- }