|
 
- UID
- 23876
- 帖子
- 84
- 精华
- 2
- 所在学校
-
- 所属专业
-
- 阅读权限
- 90
- 性别
- 男
- 来自
- 广东
- 在线时间
- 66 小时
- 注册时间
- 2008-4-6

|
2#
发表于 2008-11-3 22:06
| 只看该作者
/*循环赛日程表*/
/*递归法*/
#include "stdio.h"
#include "conio.h"
int a[100][100]={0}; /*数组a为全局变量*/
int b[100]={0};
/*n为偶数复制*/
void copy(int n)
{
int i,j,m=n/2;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
a[j+m]=a[j]+m; /*左下角相对左上角同列元素加n/2*/
a[i+m][j]=a[j+m]; /*右上角复制左下角*/
a[i+m][j+m]=a[j]; /*右下角复制左上角*/
}
}
/*n为奇数复制*/
void copyodd(int n)
{
int i,j,m=n/2;
for(i=0;i<m;i++)
{
b=m+i;b[m+i]=b;
}
for(i=0;i<m;i++)
{
for(j=0;j<m+1;j++)
{
if(a[j]>m){a[j]=b;a[m+i][j]=(b+m)%n;}
else a[m+i][j]=a[j]+m;
}
for(j=1;j<m;j++)
{
a[m+j]=b[i+j-1];
a[b[i+j-1]][m+j]=i;
}
}
}
/*复制函数*/
void makecopy(int n)
{
if(n/2>1&&n%2==1)copyodd(n);
else copy(n);
}
/*划分函数*/
void tournament(int n)
{
if(n==1){a[0][0]=1;return;}
else if(n%2==1){tournament(n+1);return;}
tournament(n/2);
makecopy(n);
}
void main()
{
int i,j,n=6;
tournament(n);
for(i=0;i<n;i++) /*输出日程表*/
{
for(j=0;j<n;j++)
{
printf("%5d",a[j]);
}
printf("\n");
}
getch();
}
这是课本的算法
程序执行结果不是想要的
不过对其中的当n为奇数的复制函数不明白 |
|
自学难成才,我们需要集体的力量 自学成才的是天才,但也希望你们的智慧与人共享 |
|