提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目
小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;
}
}
总结
小白初学,争取每日一道算法题,一位前辈说,算法题还是得自己多做几遍,做完参考下别人的,慢慢积累。