用C语言程序进行比赛日程排列

用C语言程序进行比赛日程排列

#include <stdio.h>
#define MAXN 64

int a[MAXN+ 1][MAXN +1] = {0}; // 定义全局的数组,最多安排64个选手的比赛日程 

void gamecal(int k, int n)// 定义赛程安排的函数,k表示需要安排的选手起始的序号  n表示需要安排选手的数量 
{                                //	 若k为1,n为4表示四个选手排序,从第1个起。 		 
	int i, j;
	if(n == 2)   // n== 2 ,两位选手 直接安排赛程。 
	{
		a[k][1] = k;  // 参赛选手编号 
		a[k][2] = k+1;  // 对阵选手的编号 
		a[k+1][1] = k+1;  //参赛选手编号 
		a[k+1][2] = k; // 对阵选手编号 
	}
	 else
	{   // 若不是2个选手。 
	 	gamecal(k,n/2);  // 分治   举例: 若此时k=1,n=4 ,排1,2选手 
	 	gamecal( k + n/2, n/2);  // 分治   安排3,4选手 
	 	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];  //  a[i + n/2][j - n/2]  ——> a[i - n/2][j - n/2]
			} 
		}
	} 
} 

int main()
{
	int m,i,j;
	printf("输入参赛选手人数: ");
	scanf("%d",&m) ;
	j = 2; //定义为2的整数幂 
	for(i=2;i < 8; i++)
	{
		j = j*2;
		if(j == m) 
		break;
	}
	
	if(i >= 8)
	{
		printf("参赛选手必须为2的整数次幂,且不超过64! \n");
		getch();
		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");
	}
	getch();
	return 0;
}
 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值