【每日编程Day22】小易打怪兽&&只出现一次的第一个字符

目录

一、选择题

二、编程题

1、小易打怪兽

2、只出现一次的第一个字符


一、选择题

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第1张图片

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第2张图片

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第3张图片

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第4张图片 ​​​​​【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第5张图片

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第6张图片 【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第7张图片

 参考来源 

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第8张图片 图来源【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第9张图片

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第10张图片


二、编程题

这两个题都做出来了,属于简单题。

1、小易打怪兽

思路

        其实这个题就考一点:求两个数的最大公约数。

1、首先知道两种情况:将小易的能量值与怪兽的能量值比较:如果小易的能量值>=怪兽的能量值,则此时能量值+=怪兽的能量值;

2、如果小易的能量值 <怪兽的能量值:此时的能量值+=(两个的最大公约数)

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
//            int n = 3;
            //定义妖怪的个数
            int n = sc.nextInt();
            //定义初始能量
//            int energy = 50;
            int energy = sc.nextInt();
            //初始化妖怪的能量
            int[] arr = new int[n];
//            int[] arr = {50,105,200};
            //将用户输入的妖怪能量写入到数组中
            for (int i = 0; i < arr.length; i++) {
                arr[i] = sc.nextInt();
            }
            for (int i = 0; i < arr.length; i++) {
                if(energy >= arr[i]){
                    energy = energy + arr[i];
//                    System.out.println(energy);
                }else{
                    energy = energy + maxCommon(energy,arr[i]);
//                    System.out.println(maxCommon(energy,arr[i]));
                }
            }
            System.out.println(energy);
        }
    }

    /**
     * 求出两个数字的最大公约数:这里有问题
     * @param a
     * @param b
     * @return
     */
    public static int maxCommon(int a,int b){
        //先找出两个数中的较小数
        int min = Math.min(a,b);
        int max = Math.max(a,b);
        int common = 1;
        int maxCommon = 1;
        for (int i = 1; i < min+1; i++) {
            //先找出两个数字的所有公约数
            if(max % i == 0 && min % i == 0){
                common = i;
            }
            //再找出最大公约数
            if(maxCommon < common){
                maxCommon = common;
            }
        }
        return maxCommon;
    }

2、只出现一次的第一个字符

思路:

1、用map集合来存储:第一个Key值存储string中的每一个字符;第二个参数存储每个字符出现的次数;

2、遍历集合,打印出次数为1的字符;

3、题目要求是第一个出现的次数为1的字符,因此还要做一个判断:一旦找到了第一个次数为1的字符之后,就跳出循环。

public static void main(String[] args) {
//        String str = "asaso";
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        //用map集合来做:第一个参数用来记录字符,第二个参数用来记录每个字符出现的次数
        Map map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            //如果这个字符是第一次出现,就将次数置为1
            if(map.get(str.charAt(i)) == null){
                map.put(str.charAt(i),1);
            }else{
                //如果这个字符之前出现过,现在的次数就是在之前的次数上+1
                int count = map.get(str.charAt(i));
                map.put(str.charAt(i),count+1);
            }
        }
        boolean flag = false;
        char c = 0;
        //遍历map集合
        for (int i = 0; i < str.length(); i++) {
            //获取map中的第二个参数:如果是1表示是该字符只出现了一次
            if(map.get(str.charAt(i)) == 1){
                //将flag置为true
                flag = true;
                //此时可能存在多个字符都只出现一次的情况,我们找到第一个符合情况的字符,就跳出for循环
                c = str.charAt(i);
                //遇见第一个只出现一次的字符,就跳出for循环
                break;
            }
        }
        //输出符合条件的结果
        if(flag){
            System.out.println(c);
        }else{
            System.out.println(-1);
        }
    }

要尽快将前面的作业补上,有很多优秀的博客连接,多看看 人家的解题思路~

【每日编程Day22】小易打怪兽&&只出现一次的第一个字符_第11张图片

 

你可能感兴趣的:(每日编程48Days,java,开发语言)