这道题是一个简单的枚举加模拟,关键要解决这么几个问题:

1.如何判断输赢

2.周期循环怎么解决(约瑟夫环问题) 还要注意的是,更新数据要放在判断输赢之前,否则会少一次


#include<iostream>

using namespace std;


int Ca,Cb;
int arr1[205],arr2[205];
int rule[5][5]={0};
int k1,k2;
int N;
int score_A,score_B;
int compare(int a,int b){
 return rule[a][b];
}
int main()
{
  cin>>N>>Ca>>Cb;
  for(int i=0;i<Ca;i++){
    cin>>arr1[i];
  }
  for(int i=0;i<Cb;i++){
    cin>>arr2[i];
  }
  //初始化规则数据 
  rule[0][1]=-1;
  rule[0][2]=1;
  rule[0][3]=1;
  rule[0][4]=-1;
  rule[1][2]=-1;
  rule[1][3]=1;
  rule[1][4]=-1;
  rule[2][3]=-1;
  rule[2][4]=1;
  rule[3][4]=1;
  for(int i=0;i<5;i++){
    for(int j=i+1;j<5;j++){
      rule[j][i]=-rule[i][j];
    }
  }
  for(int i=0;i<N;i++){
    k1=i%Ca;
    k2=i%Cb;
   int ret= compare(arr1[k1],arr2[k2]);
    if(ret>0)score_A++;
    else if(ret<0)score_B++;
  }
  cout<<score_A<<" "<<score_B;

return 0;}