题目描述
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小 A 和小 B 正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小 A 和小 B 比了 N 轮之后,谁赢的轮数多?
输入格式
输入包含三行。
第一行包含三个整数:
N,NA,NB,分别表示比了
N 轮,小 A 出拳的周期长度,小 B 出拳的周期长度。0<N,NA,NB<100。
第二行包含 NA 个整数,表示小 A 出拳的规律。
第三行包含 NB 个整数,表示小 B 出拳的规律。
其中,0 表示“石头”,2 表示“剪刀”,5 表示“布”。相邻两个整数之间用单个空格隔开。
输出格式
输出一行,如果小 A 赢的轮数多,输出"A";如果小 B 赢的轮数多,输出"B";如果两人打平,输出 “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 赢的轮数多。
Sample Input
10 3 4
0 2 5
0 5 0 2
Sample Output
A
思路
模拟石头剪刀布的过程,可以写一个函数判断一下谁赢了。
C语言代码:
#include <stdio.h>
#include <math.h>
#include <string.h>
const long long N = 1e6 + 10;
long long n, m, cnt = 0, ans = 0, sum = 0;
long long is_a_win(long long a, long long b)//0石头 2剪刀 5布;//写个函数判断谁赢啦
{
if((a == 0 && b == 2) || (a == 2 && b == 5) || (a == 5 && b == 0)) return 1;//A赢啦
else if(a==b) return 0;//平手
else return -1;//B赢啦
}
int main()
{
long long a[N], b[N], A, B;
scanf("%lld %lld %lld",&n, &A, &B);
for(long long i = 0; i < A; i++)//录入A的规律
scanf("%lld", &a[i]);
for(long long i = 0; i < B; i++)//录入B的规律
scanf("%lld", &b[i]);
for(long long i = 0; i < n; i++)//模拟n场猜拳
{
long long nowa, nowb;//这一局,第i场
nowa = a[i % A];//A出的是nowa
nowb = b[i % B];//B出的是nowb
cnt += is_a_win(nowa, nowb);//a赢啦,cnt就加一,B赢啦,就减一
}
if(cnt > 0) printf("A");//cnt>0 说明A赢得多
else if(cnt < 0) printf("B");//cnt<0 说明B赢得多
else printf("draw");//cnt==0, 平手
return 0;
}
C++代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, a, b, numa[105], numb[105];
while(cin >> n >> a >> b)
{
int A = 0, B = 0;
memset(numa, 0, sizeof(numa));
memset(numb, 0, sizeof(numb));
for(int i = 0; i < a; i++)
cin >> numa[i];
for(int i = 0; i < b; i++)
cin >> numb[i];
for(int i = 0; i < n; i++)
if((numa[i % a] == 0 && numb[i % b] == 2) || (numa[i % a] == 2 && numb[i % b] == 5) || (numa[i % a] == 5 && numb[i % b] == 0)) A++;
else if((numa[i % a] == 2 && numb[i % b] == 0) || (numa[i % a] == 5 && numb[i % b] == 2) || (numa[i % a] == 0 && numb[i % b] == 5)) B++;
if(A > B) cout << "A" << endl;
else if(A < B) cout << "B" << endl;
else if(A == B) cout << "draw" << endl;
}
return 0;
}
没有C语言基础的同学们,可以先学习一下C语言语法,我会整理好,后面发出来
我已经写好了,可以去C语言程序设计专栏看第一周的内容。