问题描述
设有有2n (n<=6)个球队进行单循环比赛,计划在2n-1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n-1天内每个队都与不同的对手比赛。
输入格式
输入文件matchplan.in共一行,输入n的数值。
输出格式
输出文件matchplan.out共(2n-1) 行,第i行输出第i天的比赛安排。
格式为︰A-B,C-D,…..。其中i是天数,A,B分别为比赛双方的编号,每行共2n-1个比赛场次。
样例输入
2
样例输出
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3
#include <iostream>#include <cmath>#include <cstring>#include <iomanip>using namespace std;int main() {int a[100],battle[10000] = {0};int n;cin>>n;int m = pow(2,n);for(int i = 1;i <= m - 1;i++){memset(a,0,sizeof(a));cout<<"<"<<i<<"> ";int flag = 0;for(int j = 1;j <= m - 1;j++){for(int k = j + 1;k <= m;k++){if(a[k] == 0){ //该队伍今天还没进行比赛if(a[j] == 0 && battle[100*j+k] == 0){ //另一队今天也没比赛,且两队未匹配过if(flag) cout<<", ";cout<<j<<"-"<<k;a[j] = a[k] = 1;battle[100*j+k] = 1;flag = 1;break;}}}}cout<<endl;}return 0;}
笔记:
- 题目里球队的人数是pow(2,n) 不是2n
