A:石头剪刀布

总时间限制: 1000ms 内存限制: 65536kB
描述
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期的。请问,小A和小B比了N轮之后,谁赢了?
输入
输入的第一行包含一个整数K(0 < K < 100),表示K组测试数据。
之后的每组测试数据包含三行。第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。其中,0表示“石头”,2表示“剪刀”,5表示“布”。
输出
对于每组测试数据,输出一行。如果小A赢了,输出A;如果小B赢了,输出B;如果两人打平,输出draw。
样例输入
2
10 3 4
0 2 5
0 5 0 2
5 3 3
2 0 5
0 2 5
样例输出
A
draw
提示
对于第一组测试数据,猜拳过程为:
A:0 2 5 0 2 5 0 2 5 0
B:0 5 0 2 0 5 0 2 0 5
所以A赢了4轮,B赢了2轮,双方打平4轮,所以A赢了。
对于第二组测试数据,猜拳过程为:
A:2 0 5 2 0
B:0 2 5 0 2
所以A赢了2轮,B赢了2轮,双方打平1轮,所以最终打平了。

解析:

    水题一道,没有什么算法的涉及。思路为:申请两个空间大小为N的数组,循环放置A的出拳及B的出拳。定义判断输赢的函数,判断两个数组的对应数据的输赢,统计最后A的输赢次数即可。附代码如下(菜鸟一枚,ACM大牛轻喷):

 

#include <iostream>

#include <math.h>

using namespace std;



bool win(int i,int j)

{

    if(i==0 && j==2)

        return true;



    if(i==0 && j==5)

        return false;



    if(i==2 && j==0)

        return false;

    if(i==5 && j==0)

        return true;



    if(i==2 && j==5)

        return true;

    if(i==5 && j==2)

        return false;

    return false;

}



int main()

{

    int times;

    cin>>times;

    while(times--)

    {

        int n;

        cin>>n;

        int na;

        cin>>na;

        int nb;

        cin>>nb;



        int *a = new int[na];

        int *b = new int[nb];



        int i,j,k;

        for(i=0; i<na;i++)

            cin>>a[i];

        for(i=0; i<nb; i++)

            cin>>b[i];





        int ta[10000];

        int tb[10000];



        for(i=0;i<n;i++)

        {

            ta[i]= a[i%na];

            tb[i]= b[i%nb];

        }



        int numa=0;

        int numb=0;

        for(i=0;i<n;i++)

        {

            if(ta[i]==tb[i])

                continue;

            else if(win(ta[i],tb[i]))

                numa++;

            else

                numb++;

        }

        if(numa==numb)

            cout<<"draw"<<endl;

        else if(numa>numb)

            cout<<"A"<<endl;

        else

            cout<<"B"<<endl;



    }



    return 0;







}

 

 

 

 

 

你可能感兴趣的:(a)