石头剪刀布
【提交】
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天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。