蓝桥杯 比赛安排

问题描述
  设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
输入格式
  输入文件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
样例输出的描述错了,逗号应该是空格。评测数据的正确输出格式如下:

不会做,参考自https://blog.csdn.net/qq_34845121/article/details/60957163

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[70][70]; //a[i][j]记录队伍i和队伍j是否比赛过了 
 4 int v[70];    //v[i]记录队伍i该天是否比赛过了 
 5 int main() {
 6     int n;
 7     cin >> n;
 8     int len = 1;
 9     for (int i = 1; i <= n; i++) {
10         len *= 2; //len=队伍数2^n
11     }    
12     for (int i = 0; i < len - 1; i++) {    //比赛天数2^n-1,也就是要输出的行数 
13         printf("<%d>", i + 1); //输出天数 
14         memset(v, 0, sizeof v);    //重置(新的一天每个队伍都是没有比过赛的) 
15         for (int j = 0; j < len / 2; j++) {    //每天n场,就是每行要输出几次比赛 
16             for (int k = 1; k <= len; k++) { //遍历所有队伍,找第一个参赛的队伍 
17                 if (v[k] == 1) { //如果该天该队伍已经比赛过来,跳过 
18                     continue;
19                 } 
20                 int judge = 0;    //判断k,h这两个队伍有没有比赛过 
21                 for (int h = 1; h <= len; h++) { //遍历所有队伍,找第二个参赛的队伍 
22                     if (k == h) { //自己不能和自己比较 
23                         continue;
24                     }
25                     if (v[h] == 1)    { //如果该天该队伍已经比赛过来,跳过
26                         continue;
27                     }
28                     if (a[k][h] == 0 && a[h][k] == 0) {    //h,k两队伍该天是否有一起比赛 
29                         printf("%d-%d ", k, h); //队伍k和队伍h比赛了 
30                         v[h] = 1;    //标记h队伍今天不再比赛比赛 
31                         v[k] = 1;    //标记k队伍今天不再比赛比赛 
32                         a[k][h] = 1;    //标记h和k今天已经比赛 
33                         judge = 1;    //标记第j场结束,跳到下一场 
34                         break;
35                     }
36                 }
37                 if (judge == 1)    { //第j场结束,跳到下一场  
38                     break;
39                 } 
40             }
41         }    
42         printf("
");
43     }
44     return 0;
45 }
原文地址:https://www.cnblogs.com/fx1998/p/12684937.html