问题描述
设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
一个数组a记录每个人已经配对的人,b记录一天比赛中已经参数的编号
#include <iostream>
#include <cmath>
using namespace std;
int a[65][65],b[65];
int main(int argc, char *argv[]) {
int n;
cin>>n;
int len=pow(2,n);
for(int i=1;i<=len;i++)
a[i][i]=i;
for(int i=1;i<len;i++){
cout<<"<"<<i<<">";
for(int j=0;j<=len;j++) b[j]=0;
int cnt=0;
for(int j=1;j<=len;j++){
if(b[j]) continue;
for(int k=1;k<=len;k++){
if(!b[k] && !a[j][k] ){
cnt+=2;
cout<<j<<"-"<<k;
if(cnt!=len) cout<<" ";
else cout<<endl;
a[j][k]=1;
b[j]=b[k]=1;
break;
}
}
}
}
return 0;
}
输入格式
输入文件matchplan.in共一行,输入n的数值。
输出格式
输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。
格式为:<i> A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。
样例输入
2
样例输出
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3