华为机试题02(2015)

来源:互联网 发布:编写sql语句 编辑:程序博客网 时间:2024/04/29 07:41

网上搜了几道往年机试题。
1、求最大公约数
输入一组正整数(数量小于20),输出其最大公约数。
输入:121 33 44 11 1111
输出:11

import java.util.Scanner;public class Test2015No05 {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        StringBuilder sb = new StringBuilder(input.nextLine());        String[] inputStrings = sb.toString().split(" ");        findGcd(inputStrings,minStr(inputStrings));        input.close();    }    private static int minStr(String[] strings){        int min = Integer.parseInt(strings[0]);        for(String string : strings){            int num = Integer.parseInt(string);            min = min > num ? num : min;        }        return min;    }    /*     * 找到最小的数min,用其他的数除以min,如果不能整除就min--继续循环     */    private static void findGcd(String[] strs, int min){        if(min>1){            for(String string : strs){                if((Integer.parseInt(string))%min != 0){                    findGcd(strs, --min);                    return;                }            }            System.out.println(min);        }else {            System.out.println("没有最大公约数");        }    }}

第二题 相同子串
输入一个数字(最多15个),去掉连续次数大于等于三的数字,
如果去掉后仍有连续次数大于等于三的,继续进行同样的处理,直到结果中没有出现连续次数大于等于三的数字为止。
如果最终全部消除完了 输出“none”
输入:1 1 1 1 2 2 2 1 3 3 3 3 1 1 1
输出:none

import java.util.Scanner;public class Test2015No06 {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        String inputString = input.nextLine();        deleteTriple(inputString.replaceAll(" ", ""));        input.close();    }    public static void deleteTriple(String str){        int i=0,j=1;        int count=1;        if(str.length()==0){            System.out.println("none");        }        for(;i<str.length();i++){            for(;j<str.length();j++){                if(str.charAt(j)==str.charAt(i)){                    count++;                }else {                    if(count>=3){                        deleteTriple(str.substring(0, i)+str.substring(j));                        return;                    }                    count = 1;                    i=j;                }            }            //最后一次还没比较            if(count>=3){                deleteTriple(str.substring(0, i));                return;            }        }        System.out.println(str);    }}

3、第三题 单词计数
输入一段文章,输出最高频与次高频的单词(全部小写,逗号分隔)。
文章中仅出现空格,逗号和句号这三种分隔符。
不考虑频率一致的情况。忽略大小写。
输入:I am a student.I come from China.I love China.
输出: i,china
(这道题不考虑频率一致的情况不太理解,感觉正确解法不是这样的。。不过用例测试结果是对的)

import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.TreeMap;public class Test2015No07 {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        String inputString = input.nextLine();        countWords(inputString);        input.close();    }    public static void countWords(String str){        /*         * key-->字符串,value-->频率         */        String[] strings = str.toLowerCase().split(" |,|\\.");        Map<String, Integer> map = new HashMap<String, Integer>(strings.length);        for(int i=0;i<strings.length;i++){            Integer value = map.get(strings[i]);            int count = 1;            if(value!=null){                count = value+1;            }            map.put(strings[i], count);        }        TreeMap<Integer, String> treeMap = changeMap(map);//      System.out.println(map);        Integer lastKey = treeMap.lastKey();        StringBuilder sb = new StringBuilder();        sb.append(treeMap.remove(lastKey));        sb.append(",");        sb.append(treeMap.get(treeMap.lastKey()));        System.out.println(sb);    }    public static TreeMap<Integer,String> changeMap(Map<String, Integer> map){        Map<Integer, String> newMap = new HashMap<Integer, String>(map.size());        Iterator<Entry<String, Integer>> it = map.entrySet().iterator();        while(it.hasNext()){            Entry<String, Integer> en = it.next();            Integer value = en.getValue();            String key = en.getKey();            newMap.put(value, key);        }        TreeMap<Integer, String> resultTreeMap = new TreeMap<Integer, String>(newMap);        return resultTreeMap;    }}
0 0