一、题目描述
二、题解
1. 解题思路与方法
简单的模拟题,对题目进行分析后可以发现题目的要求就是对N次猜拳进行比较,最后得出两人的分数,比较特别的是:1.题目将简单的猜拳规则改变了一下,加上了新的出拳情况。2.题目以出拳周期的形式给出了每次出拳的情况。首先对于出拳周期,无论次数N为多少,出拳顺序均是按照给定的周期循环,因此可以将周期使用数组存储起来,查询时在数组中循环取值,即可保证按周期出拳。解决完出拳情况的问题,对于每次出拳结果的判断,有两种方式:第一种:由于题目给出了游戏结果表,去除平局情况,直接将对于某个人来说全输或全赢的结果全部判断一次即可。第二种:由于题目给出了一张游戏结果表,实际上相当于告诉了我们该如何对每次出拳值对应的结果进行查询,例如小A出剪刀,即为0;小B出石头,即为1,则对于小A来说,游戏结果则为表中(0,1)位置的结果,其他的结果以此类推均可以查表得到,核心就是根据游戏结果建立这样一张表,显而易见使用二维数组建表保存结果是非常好的方式。
2. code
import java.util.Scanner;
public class Main{
public static int[][] map;
public static int as;
public static int bs;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n =sc.nextInt();
int na =sc.nextInt();
int nb =sc.nextInt();
int[] a = new int[na];
int[] b = new int[nb];
for(int i=0;i<na;i++){
a[i]=sc.nextInt();
}
for(int i=0;i<nb;i++){
b[i]=sc.nextInt();
}
as = 0;
bs = 0;
for(int i=0;i<n;i++){
int tempA = a[i%na]; //根据周期循环取出拳情况
int tempB = b[i%nb];
judge(tempA,tempB);
}
System.out.println(as+" "+bs);
sc.close();
}
public static void judge(int ta, int tb) {
if(ta==tb){ //平局情况
return;
}else if((ta==0&&tb==1)||(ta==0&&tb==4)||(ta==1&&tb==2)||(ta==1&&tb==4)||(ta==2&&tb==0)||(ta==2&&tb==3)||(ta==3&&tb==0)||(ta==3&&tb==1)||(ta==4&&tb==2)||(ta==4&&tb==3)){ //将对于小A来说全输的情况列举
bs++;
}else{
as++;
}
}
}