2020-09-03

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

每日学习一个算法——猜数字(在下菜鸟,自己练习)

 


题目

小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?

输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。

示例 1:

输入:guess = [1,2,3], answer = [1,2,3]
输出:3
解释:小A 每次都猜对了。

示例 2:

输入:guess = [2,2,3], answer = [3,2,1]
输出:1
解释:小A 只猜对了第二次。
 

限制:

guess的长度 = 3
answer的长度 = 3
guess的元素取值为 {1, 2, 3} 之一。
answer的元素取值为 {1, 2, 3} 之一。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/guess-numbers

一、解题思路

这个题其实蛮简单的,只不过本人是个初学者。

首先依次输入两组数,而后写一个计算有几个相同的数、第几个相同的数的方法,在主方法内引用。

二、更新代码

1.第一遍

代码如下(示例):(第一遍自己写的,后来看了别人是十行就搞定了,我这个菜鸡写了快100,难受)

package SuanFa01;
import java.util.Scanner;
public class Caishuzi {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] str;
        String[] str1;
        boolean flag = false;
        boolean flag1 = false;
        while (true){
            System.out.println("请键盘录入第一组三个数(1-3),中间以空格分隔");
            str = sc.nextLine().split(" ");
            if(str.length==3){
                int b = 0;
                for (int i = 0; i < str.length;i++ ) {
//红色部分有点乱哈,大致意思就是,如果全部通过,就是输入的字符串合格,就返回true,反之就是false。
                    int a = Integer.parseInt(str[i]);
                    if (a >= 1 & a <= 3) {
                        b++;
                    }else{
                        System.out.println("您输入的数字范围不对,请重新输入");
                    }
                }
                if(b==3){
                    flag = true;
                }
            }else{
                System.out.println("您输入的数字个数不对,请重新输入");
            }
//这蓝色部分和红色字体一样,是第二个数组
            System.out.println("请键盘录入第二组三个数(1-3),中间以空格分隔");
            str1 = sc.nextLine().split(" ");
            if(str1.length==3){
                int b = 0;
                for (int i = 0; i < str1.length;i++ ) {
                    int a = Integer.parseInt(str1[i]);
                    if (a >= 1 & a <= 3) {
                        b++;
                    }else{
                        System.out.println("您输入的数字范围不对,请重新输入");
                    }
                }
                if(b==3){
                    flag1 = true;
                }
            }else{
                System.out.println("您输入的数字个数不对,请重新输入");
            }
            if(flag&flag1){
                duiBi(str, str1);
            }
        }
    }
//下面红色字体是一个对比的方法,就是比较两个数组对应的数字是否相同,有几个相同
    public static void duiBi(String[] A, String[] B) {
        int a = 0;
        for (int i = 0; i < A.length; i++) {
            int b = Integer.parseInt(A[i]);//因为之前输入的是字符串,这边是整型数组,所以要转换一下
            int c = Integer.parseInt(B[i]);
            if (b==c) {
                a++;
            }
        }
        switch (a) {
            case 3:
                System.out.println("三次全部答对");
                break;
            case 2:
                System.out.println("二次答对");
                break;
            case 1:
                System.out.println("一次答对");
                break;
            case 0:
                System.out.println("全部错误");
                break;
        }
        //为什么A[i].equalsB[i]不对???
        //之前不知道为什么A[i]==B[i]为什么不能用做判断,后来发现这俩是字符串,要用equals
        int d = 0;
        for (int i = 0; i < A.length; i++) {
            int b = Integer.parseInt(A[i]);
            int c = Integer.parseInt(B[i]);
            if (b==c) {
                d++;
                System.out.println("第" + d + "个猜对了");
            }
        }
    }
}

2.第二遍

代码如下(示例):(这个和第一遍的原理大致相同,只不过把一些没用的去掉了,并且借鉴了别人的一些方法)

package SuanFa01;

import java.util.Scanner;

public class Caishuzi01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请键盘录入第一组三个数(1-3),中间以空格分隔");
            String[] str = sc.nextLine().split(" ");

            System.out.println("请键盘录入第二组三个数(1-3),中间以空格分隔");
            String[] str1 = sc.nextLine().split(" ");
            game(zhuanHuan(str),zhuanHuan(str1));
        }
    }
//还是因为字符串和数组的转换问题,下面红色代码
    public static int[] zhuanHuan(String[] A) {
        int a[] = new int[A.length];
        for (int i = 0; i <A.length ; i++) {
            a[i] = Integer.parseInt(A[i]);
        }
        return a;
    }
    public static int game(int[] guess,int[] answer){
        int r = 0;
        for (int i = 0; i < 3; i++) {
            if(guess[i] == answer[i]) {
                r++;
                System.out.println("第"+(i+1)+"个数相同");
            }
        }
        System.out.println("共"+r+"个数相同");
        return r;
    }
}




3.第三遍

代码如下(示例):后来想想,为什么非要用字符串输入呢,虽然输入省劲了,但是后面转换更费劲了,还不如直接整型数组输入,两下搞完

package SuanFa01;

import java.util.Scanner;

public class Caishuzi02 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int[] a = new int[3];

        int[] b = new int[3];

        System.out.println("请输入第一组的三个数字");

        for (int i = 0; i < 3; i++) {

            System.out.println("请输入第"+(i+1)+"个数字");

            a[i]=sc.nextInt();

        }

        System.out.println("请输入第二组的三个数字");

        for (int i = 0; i < 3; i++) {

            System.out.println("请输入第"+(i+1)+"个数字");

            b[i]=sc.nextInt();

        }

        game(a, b);

    }

    public static int game(int[] guess,int[] answer){

        int r = 0;

        for (int i = 0; i < 3; i++) {

            if(guess[i] == answer[i]) {

                r++;

                System.out.println("第"+(i+1)+"个数相同");

            }

        }

        System.out.println("共"+r+"个数相同");

        return r;

    }

}

总结

小白初学,争取每日一道算法题,一位前辈说,算法题还是得自己多做几遍,做完参考下别人的,慢慢积累。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值