zoukankan      html  css  js  c++  java
  • 石头剪刀布

    石头剪刀布

    题目描述

    石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

    一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头 - 布 - 石头 - 剪刀 - 石头 - 布 - 石头 - 剪刀……”,就是以 “石头 - 布 - 石头 - 剪刀” 为周期不断循环的。请问,小A和小B 比了N轮之后,谁赢的轮数多?

    输入格式

    输入包含三行。

    第一行包含三个整数:NNA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0<N,NA,NB<100。

    第二行包含NA个整数,表示小A出拳的规律。

    第三行包含NB个整数,表示小B出拳的规律。

    其中,0 表示 “石头”,2表示 “剪刀”,5表示 “布”。相邻两个整数之间用单个空格隔开。

    输出格式

    输出一行,如果小A赢的轮数多,输出  A ;如果小B赢的轮数多,输出 B ;如果两人打平,输出  draw 。


    样例输入

    10 3 4
    0 2 5
    0 5 0 2

    样例输出

    A 

    说明/提示

    对于测试数据,猜拳过程为:

    A0 2 5 0 2 5 0 2 5 0
    B0 5 0 2 0 5 0 2 0 5

    A赢了4轮,B赢了2轮,双方打平4轮,所以A赢的轮数多。


    解法一

      直接模拟出拳周期耶( •̀ ω •́ )y,在来几个笨笨的if判断,最后比较一下谁赢得多就AC啦!

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a[105],b[105];
     4 int main ()
     5 {
     6     int n,na,nb,wa=0,wb=0;
     7     cin>>n>>na>>nb;
     8     for(int i=0;i<na;i++)
     9     {
    10         cin>>a[i];
    11     }
    12     for(int i=0;i<nb;i++)
    13     {
    14         cin>>b[i];
    15     }
    16     
    17     int ta=0,tb=0;
    18     for(int i=0;i<n;i++)
    19     {
    20         if(ta==na)
    21         {
    22             ta=0;
    23         }
    24         if(tb==nb)
    25         {
    26             tb=0;
    27         }
    28         if(a[ta]==0 && b[tb]==2) wa++;
    29         if(a[ta]==2 && b[tb]==0) wb++;
    30         if(a[ta]==0 && b[tb]==5) wb++;
    31         if(a[ta]==5 && b[tb]==0) wa++;
    32         if(a[ta]==2 && b[tb]==5) wa++;
    33         if(a[ta]==5 && b[tb]==2) wb++;
    34         ta++;
    35         tb++;
    36     }
    37     
    38     if(wa>wb)
    39     {
    40         cout<<"A";
    41     }
    42     else if(wa<wb)
    43     {
    44         cout<<"B";
    45     }
    46     else
    47     {
    48         cout<<"draw";
    49     }
    50         
    51     return 0;
    52 }

      解释一下变量(数组)都啥意思:

    • n:表示比赛了轮
    • na:表示小A的出拳周期长度
    • nb:表示小B的出拳周期长度
    • a[105]:记录小A的出拳周期
    • b[105]:记录小B的出拳周期
    • wa:表示小A的胜利次数
    • wb:表示小B的胜利次数
    • ta:用于指向小A周期中的出拳内容
    • tb:用于指向小B周期中的出拳内容

      之前楼楼还加上了一句 if(a[ta]==b[tb]) continue; ,可以让时间复杂度降低一定程度,但是千万注意,加上此条代码时,务必要先让ta和tb两个变量+1,否则就可能变成每次都直接continue。

    若阁下喜欢,赏一赞可否?

    感谢您的阅读o(* ̄▽ ̄*)ブ

  • 相关阅读:
    .net百度编辑器的使用
    phpstudy远程连接mysql
    HDU-2389 Rain on your Parade
    HDU-2768 Cat vs. Dog
    HDU-1151 Air Raid
    HDU-1507 Uncle Tom's Inherited Land*
    HDU-1528/1962 Card Game Cheater
    HDU-3360 National Treasures
    HDU-2413 Against Mammoths
    HDU-1045 Fire Net
  • 原文地址:https://www.cnblogs.com/DYXM/p/13581463.html
Copyright © 2011-2022 走看看