比赛日程安排程序

来源:互联网 发布:淘宝返利网排行 编辑:程序博客网 时间:2024/04/29 13:36

比赛日程安排程序设计的关键在于理解分治法,和递归。

另外将日程分治后,又要考虑如何将分开的日程合并,这就需要程序设计者自己观察,总结规律。

//比赛日程安排#include <stdio.h>#define MAXN 64int a[MAXN][MAXN + 1] = {0};void gamecal (int k, int n)            //处理k开始的n个选手的日程{int i, j;if(n == 2){a[k][1] = k;                       //参赛选手编号a[k][2] = k + 1;                 //对阵选手编号a[k + 1][1] = k + 1;           //参赛选手编号a[k + 1][2] = k;                 //对阵选手编号}else{gamecal(k , n/2);gamecal(k + n/2, n/2);for(i = k; i < k + n/2; i++)           //填充右上角{for(j = n/2 + 1; j <= n; j++){a[i][j] = a[i + n/2][j - n/2];}}for(i = k + n/2; i < k + n; i++)     //填充左下角{for(j = n/2 + 1;j <= n; j++ ){a[i][j] = a[i - n/2][j - n/2];}}}}int main(){int m, i, j;printf("输入参赛选手人数: ");scanf("%d", &m);j =2;for(i = 2; i < 8; i++){j = j * 2;if(j == m)  break;}if(i >= 8){printf("参赛选手人数必须为2的整数次幂,且不超过64!\n");return 0;}gamecal(1, m);printf("\n编号");for(i = 2; i <= m; i++)     printf("%2d天",i - 1);printf("\n");for(i = 1; i <= m; i++){for(j = 1; j <= m; j++)printf("%4d", a[i][j]);printf("\n");}return 0;}


原创粉丝点击