华为机试题02(2015)

网上搜了几道往年机试题。
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值