蓝桥杯 算法训练 比赛安排

来源:互联网 发布:程序员试用期转正总结 编辑:程序博客网 时间:2024/04/27 12:46
问题描述
  设有有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


#include <stdio.h>  
#define MAXSIZE 64  
  
int a[MAXSIZE][MAXSIZE];  
  
void Div(int s, int left, int right)  
{  
    if(s < 2){  
        return;  
    }  
      
    int i, j;  
    int mid = (left + right) / 2;     
      
    s /= 2;  
    Div(s, left, mid);  
    Div(s, mid+1, right);  
      
    for(i = 0; i <= s; i ++){  
        for(j = left; j <= mid; j ++){  
            a[i+s][j+s] = a[i][j];  
        }  
        for(j = mid+1; j <= right; j ++){  
            a[i+s][j-s] = a[i][j];  
        }  
    }  
      
}  
  
int main()  
{  
    int i, j, n, size;  
      
    scanf("%d", &n);  
      
    size = 1;  
    for(i = 0; i < n; i ++){  
        size *= 2;  
    }  
      
    for(i = 1; i <= size; i ++){  
        a[0][i] = i;  
    }  
  
    Div(size, 1, size);  
      
    for(i = 1; i < size; i ++){  
        printf("<%d>", i);  
        for(j = 1; j <= size; j ++){  
            if(a[i][j] > j){  
                printf("%d-%d ", j, a[i][j]);  
            }                 
        }  
        printf("\n");  
    }  
      
      
    return 0;  

0 0
原创粉丝点击