1. 程式人生 > >c語言之迴圈賽演算法

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);


}