P1328 生活大爆炸版石头剪刀布(模拟,打表,洛谷,java)

洛谷链接: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);
    
    }
}
发布了68 篇原创文章 · 获赞 26 · 访问量 618

猜你喜欢

转载自blog.csdn.net/weixin_44685629/article/details/103830801