2020-09-03

tech2024-07-26  57

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

 

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

题目一、解题思路二、更新代码 1.第一遍2.第二遍3.第三遍总结

 


题目

小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;     } }

总结

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

最新回复(0)