艾立卡的回答:
题目好像有问题。
当n=23=8时??
应该是:n=2k=8吧!
(1)如果n=2k
循环赛需要进行(n-1)!场比赛。
至少要进行(n-1)天,因为:
①每个选手必须与其他n-1名选手比赛各一次;
②每个选手一天至多只能赛一次;
③循环赛要在最短时间内完成。
(2)当n=2k=8时,循环赛日程表:
第1天:1-2;3-4;5-6;7-8;
第2天:1-3;2-4;5-7;6-8;
第3天:1-4;2-3;5-8;6-7;
第4天:1-5;2-6;3-7;4-8
第5天:1-6;2-7;3-8;4-5;
第6天:1-7;2-8;3-5;4-6;
第7天:1-8;2-5;3-6;4-7;
杨立学的回答:
题目好像有问题。
当n=23=8时??
应该是:n=2k=8吧!
(1)如果n=2k
循环赛需要进行(n-1)!场比赛。
至少要进行(n-1)天,因为:
①每个选手必须与其他n-1名选手比赛各一次;
②每个选手一天至多只能赛一次;
③循环赛要在最短时间内完成。
(2)当n=2k=8时,循环赛日程表:
第1天:1-2;3-4;5-6;7-8;
第2天:1-3;2-4;5-7;6-8;
第3天:1-4;2-3;5-8;6-7;
第4天:1-5;2-6;3-7;4-8
第5天:1-6;2-7;3-8;4-5;
第6天:1-7;2-8;3-5;4-6;
第7天:1-8;2-5;3-6;4-7;
King的回答:
直接上代码吧~~
#include
void copy(int n);
void tour(int n);
void makecopy(int n);
void copyodd(int n);
int a[100][100];
int b[100];
int main()
{
int n,i,j;
printf("please input n :\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a[1][i]=i;
a[i][1]=i;
}
tour(n);
if(n % 2 == 1)
for(i=1;i<=n;i++)
{
for(j=1;j<=n+1;j++)
{
if(a[i][j] == n +1)
printf(" ");
else
printf("%-4d",a[i][j]);
}
printf("\n");;
}
else
for(i=1;i<=n;i++)
{
for(j=1;j <= n;j++)
{
if(a[i][j] == n +1)
printf(" ");
else
printf("%-4d",a[i][j]);
}
printf("\n");;
}
}
void copy(int n)
{
int m = n/2;
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
a[i][j+m]=a[i][j]+m;
a[i+m][j]=a[i][j+m];
a[i+m][j+m]=a[i][j];
}
}
void tour(int n)
{
if(n==1)
{
a[1][1]=1;
return;
}
if(n%2==1)//奇数
{
tour(n+1);
return;
}
tour(n/2);
makecopy(n);
}
void makecopy(int n)
{
if(n/2>1 && ((n/2)%2))
copyodd(n);
else
copy(n);
}
void copyodd(int n)
{
int i,j;
int m=n/2;
for(i=1;i<=m;i++)
{
b[i]=m+i;
b[m+i]=b[i];
}
for(i=1;i<=m;i++)
{
for(j=1;j<=m+1;j++)
{
if(a[i][j]>m)
{
a[i][j]=b[i];
a[m+i][j]=(b[i]+m)%n;
}
else
{
a[m+i][j]=a[i][j]+m;
}
}
for(j=2;j<=m;j++)
{
a[i][m+j]=b[i+j-1];
a[b[i+j-1]][m+j]=i;
}
}
}
就这个啦,希望能帮到你给分吧~~
赖长清的回答:
好像有问题,搞好给你