问题描述
    设有有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

    1. #include <iostream>
    2. #include <cmath>
    3. #include <cstring>
    4. #include <iomanip>
    5. using namespace std;
    6. int main() {
    7. int a[100],battle[10000] = {0};
    8. int n;
    9. cin>>n;
    10. int m = pow(2,n);
    11. for(int i = 1;i <= m - 1;i++){
    12. memset(a,0,sizeof(a));
    13. cout<<"<"<<i<<"> ";
    14. int flag = 0;
    15. for(int j = 1;j <= m - 1;j++){
    16. for(int k = j + 1;k <= m;k++){
    17. if(a[k] == 0){ //该队伍今天还没进行比赛
    18. if(a[j] == 0 && battle[100*j+k] == 0){ //另一队今天也没比赛,且两队未匹配过
    19. if(flag) cout<<", ";
    20. cout<<j<<"-"<<k;
    21. a[j] = a[k] = 1;
    22. battle[100*j+k] = 1;
    23. flag = 1;
    24. break;
    25. }
    26. }
    27. }
    28. }
    29. cout<<endl;
    30. }
    31. return 0;
    32. }

    笔记:

    • 题目里球队的人数是pow(2,n) 不是2n