您的位置:首页 > 编程语言 > Java开发

华为校园招聘上机试题Java实现(一)

2014-04-05 21:53 459 查看
找工作时华为会考上机题目,如果用Java语言,这里总结如下注意事项:

关于输入输出,注意掌握Scanner类

[java] view
plaincopy





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"

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

[java] view
plaincopy





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: 统计字符串中各字母出现的次数

统计字符串中各字母出现的次数,并按照规定格式和 自然顺序 输出给定字符串:"asdfdfdassssddf" ,输出:a:2 d:5 f:3 s:5 

[java] view
plaincopy





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

代码:

[java] view
plaincopy





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
;  

        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);  

        }  

  

    }  

  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为 java 校园招聘