洛谷-P1328

一、题目描述


二、题解

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

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值