Openjudge1.6.08 石头剪刀布

科技   2024-11-22 06:02   河北  

石头剪刀布

【提交】

http://noi.openjudge.cn/ch0106/08/

【描述】

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

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

【输入】

输入包含三行。

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

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

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

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

【输出】

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

【样例输入】

10 3 4
0 2 5
0 5 0 2

【样例输出】

A

【提示】

对于测试数据,猜拳过程为:
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赢的轮数多。

【参考程序】

C语言版本

/*
* 08:石头剪刀布
* http://noi.openjudge.cn/ch0106/08/
*/
 
include <cstdio>

int main()
{
    int a[100] = { 0 }, b[100] = { 0 };
    int n, n_a, n_b, a_y = 0, b_y = 0;
    scanf("%d%d%d", &n, &n_a, &n_b);
    for (int i = 0; i < n_a; i++)
    {
        scanf("%d", &a[i]);
    }
    for (int i = 0; i < n_b; i++)
    {
        scanf("%d", &b[i]);
    }
    for (int i = 0; i < n; i++)
    {
        int A = a[i % n_a];
        int B = b[i % n_b];
        if ((A == 0 && B == 2) || (A == 2 && B == 5) || (A == 5 && B == 0))
        {
            a_y += 1;
        }
        if ((A == 0 && B == 5) || (A == 2 && B == 0) || (A == 5 && B == 2))
        {
            b_y += 1;
        }
    }
    if (a_y > b_y)
        printf("A");
    else if (a_y < b_y)
        printf("B");
    else
        printf("draw");
    return 0;
}

C++语言版本

/*
* 08:石头剪刀布
* http://noi.openjudge.cn/ch0106/08/
*/
 
include <iostream>

using namespace std;

int main()
{
    int a[100] = { 0 }, b[100] = { 0 };
    int n, n_a, n_b, a_y = 0, b_y = 0;
    cin >> n >> n_a >> n_b;
    for (int i = 0; i < n_a; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < n_b; i++)
    {
        cin >> b[i];
    }
    for (int i = 0; i < n; i++)
    {
        int A = a[i % n_a];
        int B = b[i % n_b];
        if ((A == 0 && B == 2) || (A == 2 && B == 5) || (A == 5 && B == 0))
        {
            a_y += 1;
        }
        if ((A == 0 && B == 5) || (A == 2 && B == 0) || (A == 5 && B == 2))
        {
            b_y += 1;
        }
    }
    if (a_y > b_y)
        cout << 'A';
    else if (a_y < b_y)
        cout << 'B';
    else
        cout << "draw";
    return 0;
}

青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

组队学习
分享组队学习的点点滴滴,和学习者一起成长!
 最新文章