解题思路:
1.由题可知,两个人的出拳是有规律的,并且是按照一定的周期性,一想到周期问题便要想到模运算%
2.输入有三行,第一行为三个整数,分别代表轮数和小A的出拳规律和小B的出拳规律,分别定义为N,NA,NB,需要用两个数组来分别存两个人的出拳 int a[105],b[105];
3.输入NA和NB后,分别创建对应的循环,来存入他们的出拳数字,从数组下标0开始存入
4.创建从0到N-1的循环,因为NA和NB的出拳数字我们是已知的,所以利用模运算将后面的出拳规律补齐
5.补齐之后,创建0到N-1的循环,依次将a[i]和b[i]作比较,如果小A赢,那么sumA++,如果小B赢,sumB++
6.最后对sumA和sumB判断,输出对应的内容
#include<bits/stdc++.h>
using namespace std;
int a[105],b[105];//分别用来存放小A和小B的出拳数字
int main()
{
int n,len_a,len_b,suma=0,sumb=0;//定义两个人的出拳周期长度
cin>>n>>len_a>>len_b;
for(int i=0;i<len_a;i++)
cin>>a[i];//输入小A出拳的数字
for(int j=0;j<len_b;j++)
cin>>b[j];//输入小B出拳的数字
for(int i=0;i<n;i++)//将小A小B的出拳数字补齐
{
a[i]=a[i%len_a];
b[i]=b[i%len_b];
}
for(int i=0;i<n;i++)//遍历n长比赛
{
if((a[i]==0&&b[i]==2)||(a[i]==2&&b[i]==5)||(a[i]==5&&b[i]==0))
suma++;//如果符合上述情况,小A赢
else if(a[i]==b[i])//如果相等,则,继续
continue;
else//如果都不符合上述情况,则小B赢
sumb++;
}
if(suma>sumb)//如果A赢的次数多
cout<<"A";//输出A
else if(suma<sumb)//如果B赢的次数多
cout<<"B";//输出B
else
cout<<"draw";//否则输出相等
return 0;
}