洛谷链接:https://www.luogu.com.cn/problem/P1328
1.我的代码(纯模拟,简单但累赘)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int counta=0,countb=0;//记录小A小B得分
int n=in.nextInt(); //n次猜拳
int a1=in.nextInt(); //小A出拳的周期长度
int b1=in.nextInt(); //小B出拳的周期长度
int[] a=new int[a1]; //定义a1大小的数组
int[] b=new int[b1]; //定义b1大小的数组
//输入小A出拳的规律
for(int i=0;i<a1;i++) {
a[i]=in.nextInt();
}
//输入小B出拳的规律
for(int i=0;i<b1;i++) {
b[i]=in.nextInt();
}
for(int i=0;i<n;i++) {
if(a[i%a1]==0) {
//如果小A出“剪刀”
if(b[i%b1]==0) {
//如果小B出“剪刀” 平局
}else if(b[i%b1]==1) {
//如果小B出“石头”
countb++;
}else if(b[i%b1]==2) {
//如果小B出“布”
counta++;
}else if(b[i%b1]==3) {
//如果小B出“蜥蜴人”
counta++;
}else if(b[i%b1]==4) {
//如果小B出“斯波克”
countb++;
}
}else if(a[i%a1]==1) {
//如果小A出“石头”
if(b[i%b1]==0) {
//如果小B出“剪刀”
counta++;
}else if(b[i%b1]==1) {
//如果小B出“石头” 平局
}else if(b[i%b1]==2) {
//如果小B出“布”
countb++;
}else if(b[i%b1]==3) {
//如果小B出“蜥蜴人”
counta++;
}else if(b[i%b1]==4) {
//如果小B出“斯波克”
countb++;
}
}else if(a[i%a1]==2) {
//如果小A出“布”
if(b[i%b1]==0) {
//如果小B出“剪刀”
countb++;
}else if(b[i%b1]==1) {
//如果小B出“石头”
counta++;
}else if(b[i%b1]==2) {
//如果小B出“布” 平局
}else if(b[i%b1]==3) {
//如果小B出“蜥蜴人”
countb++;
}else if(b[i%b1]==4) {
//如果小B出“斯波克”
counta++;
}
}else if(a[i%a1]==3) {
//如果小A出“蜥蜴人”
if(b[i%b1]==0) {
//如果小B出“剪刀”
countb++;
}else if(b[i%b1]==1) {
//如果小B出“石头”
countb++;
}else if(b[i%b1]==2) {
//如果小B出“布”
counta++;
}else if(b[i%b1]==3) {
//如果小B出“蜥蜴人” 平局
}else if(b[i%b1]==4) {
//如果小B出“斯波克”
counta++;
}
}else if(a[i%a1]==4) {
//如果小A出“斯波克”
if(b[i%b1]==0) {
//如果小B出“剪刀”
counta++;
}else if(b[i%b1]==1) {
//如果小B出“石头”
counta++;
}else if(b[i%b1]==2) {
//如果小B出“布”
countb++;
}else if(b[i%b1]==3) {
//如果小B出“蜥蜴人”
countb++;
}else if(b[i%b1]==4) {
//如果小B出“斯波克” 平局
}
}
}
System.out.println(counta+" "+countb);
}
}
2.打表(简洁明了)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int counta=0,countb=0;//记录小A小B得分
int n=in.nextInt(); //n次猜拳
int a1=in.nextInt(); //小A出拳的周期长度
int b1=in.nextInt(); //小B出拳的周期长度
int[] a=new int[210];
int[] b=new int[210];
int[][] vs= {{0,0,1,1,0},{1,0,0,1,0},{0,1,0,0,1},{0,0,1,0,1},{1,1,0,0,0}}; //得分表的处理
//输入小A出拳的规律
for(int i=0;i<a1;i++) {
a[i]=in.nextInt();
}
//输入小B出拳的规律
for(int i=0;i<b1;i++) {
b[i]=in.nextInt();
}
//打表
for(int i=0;i<n;i++) {
counta += vs[a[i % a1]][b[i % b1]]; //周期循环
countb += vs[b[i % b1]][a[i % a1]];
}
System.out.println(counta+" "+countb);
}
}