c語言之迴圈賽演算法
設有n=2^k個運動員,要進行網球迴圈賽。現在要設計一個滿足以下要求的比賽日程表:
(1).每個選手必須與其他n-1個選手各賽一場
(2).每個選手一天只能賽一次
(3).迴圈賽一共進行n-1天
對於迴圈賽的計算,如果說吧所有的比賽算出來過於複雜,但是對於2個隊伍的比賽我們就可以非常輕鬆的做出來。
所以說我們將2個隊伍的比賽列出來然後進行迭代法吧所有比賽排列出來就可以了。
程式碼如下:
#include<stdio.h>
#include<math.h>
void xunhuan(int k)
{
int a[100][100];
int n,temp,i,j,p,t;
n=2;
a[1][1]=1;a[1][2]=2;
a[2][1]=2;a[2][2]=1;
for(t=1;t<k;t++)
{
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;
for(i=1;i<=temp;i++)
for(j=temp+1;j<=n;j++)
a[i][j]=a[i+temp][(j+temp)%n];
for(i=temp+1;i<=n;i++)
for(j=temp+1;j<=n;j++)
a[i][j]=a[i-temp][j-temp];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("%d ",a[i][j]);
if(j==n)
printf("\n");
}
}
void main()
{
int k;
printf("比賽選手個數為n(n=2^k),請輸入引數K(K>0):\n");
scanf("%d",&k);
if(k!=0)
xunhuan(k);
}