程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 循環日程表問題,循環日程表

循環日程表問題,循環日程表

編輯:關於C語言

循環日程表問題,循環日程表


設有n=2k個選手參加比賽,要求設計一個滿足一下要求的比賽日程表:

(1)每個選手必須與其他的n-1個選手個比賽一次;

(2)每個選手每天只能賽一次 。

(3)循環賽一共進行n-1天

設計一個比賽日程表,該表有n行和n-1列,第i行j列為第i個選手第j天遇到的選手

#include<stdio.h>
#include<math.h>
int a[100][100];
void match(int k)
{
    int n,temp,i,j;
    n=2;      //k=0兩個參賽選手日程可以直接求得
    a[1][1]=1;
    a[1][2]=2;
    a[2][1]=2;
    a[2][2]=1;
    for(i=1; i<k; i++) //迭代處理,依次處理2^n....2^k個選手的比賽日程
    {
        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");
        }
}
int main()
{
    int k;
    scanf("%d",&k);
    if(k!=0)
        match(k);
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved