zoukankan      html  css  js  c++  java
  • 蓝桥杯 比赛安排

    问题描述
      设有有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 }
  • 相关阅读:
    快逸报表调用存储过程(SqlServer)
    一个睡五分钟等于六个钟头的方法 (转)
    Windows Live Writer For Windows Server 2003
    设计模式装饰者模式
    SqlServerCUBE
    Android 70道面试题汇总不再愁面试
    说服力:让你的PPT会说话
    亮剑Java项目开发案例导航
    初入社会必知的88个潜规则
    android UI进阶之仿iphone的tab效果2
  • 原文地址:https://www.cnblogs.com/fx1998/p/12684937.html
Copyright © 2011-2022 走看看