循环赛程表-C

本文介绍了一个C语言编程问题,涉及如何设计一个网球循环赛程表,满足每个选手与其他选手各赛一场,每天最多赛一次,并在n-1天内完成全部比赛。给出的解决方案是通过递归或迭代的方式,从小规模矩阵出发,逐步填充赛程表。代码分析部分解释了如何根据矩阵的分布规律构建赛程表,并展示了输入系数k计算参赛人数及打印赛程表的过程。

题目

设有 n=2k 个运动员要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表
(1)每个选手必须与其他n-1个选手各赛一场
(2)每个选手一天只能赛一次
(3)循环赛一共进行n-1天
按此要求将比赛日程表设计成有n行和n-1列的一个表。表中第i行,第j列处填入第i个选手在第j天所遇到的对手,其中1<=i<=n,1<=j<=n-1。
编写算法实现循环赛日程表。

参考代码

#include<stdio.h>
#include<math.h>



void table(int k){
	int i,j,m,temp;
	int a[100][100];
	int n=2;//人数为2时直接打印矩阵
	a[1][1]=1;a[1][2]=2;
	a[2][1]=2;a[2][2]=1;
for(m=1;m<k;m++)  //系数
	{		
	temp=n;
	n=n*2;		
		for(i=temp+1;i<=n;i++)
		{
			for(j=1;j<=temp;j++)
			{
				a[i][j]=a[i-temp][j]+temp;	//在人数为2的矩阵数值基础上加			
			}
		}//左下角填充
		
		for(i=1;i<=temp;i++)
		{
			for(j=temp+1;j<=n;j++)
			{
				a[i][j]=a[i+temp][j-temp];			
			}
		}//右上角填充

		for(i=temp+1;i<=n;i++)
		{
			for(j=temp+1;j<=n;j++)
			{
				a[i][j]=a[i-temp][j-temp];				
			}
		}//右下角填充

	}
	printf("参与人数为:%d\n\n",n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			printf("%d ",a[i][j]);
			if(j==n)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值