• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
patty-patty
博客园    首页    新随笔    联系   管理    订阅  订阅
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;



}

 

 

 

 

 

posted on 2013-08-09 20:13  patty-patty  阅读(698)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3