voip
风的方向
厚德致远,博学敦行!
posts - 52,comments - 21,trackbacks - 0
         有n=2^k个运动员比赛,现要求设计一张比赛日程表,要求如下:
        (1)每个选手必须与其他n-1个选手各比赛一次;
        (2)每个选手一天只能比赛一次;
        (3)循环赛一共进行n-1天;
         这个题目自己列下表,观察一下规律就成,书上说的二分不是那么好理解!重在实际应用。。。
代码如下:
#include<stdio.h>

void   Table(int k,int a[][100])
{
    
int n=1;
    
int i,j,s,t;
    
for(i=1;i<=k;i++)
        n
*=2;
    
for(i=1;i<=n;i++)
        a[
1][i]=i;
    
int m=1;
    
for(s=1;s<=k;s++)
    
{
        n
/=2;
        
for(t=1;t<=n;t++)
            
for(i=m+1;i<=2*m;i++)
                
for(j=m+1;j<=2*m;j++)
                
{
                    a[i][j
+(t-1)*m*2]=a[i-m][j+(t-1)*m*2-m];
                    a[i][j
+(t-1)*m*2-m]=a[i-m][j+(t-1)*m*2];
                }

        m
*=2;
    }

}


int main()
{
    
int a[100][100];
    Table(
3,a);
    
int i,j;
    
for(i=1;i<=8;i++)
    
{
        
for(j=1;j<=8;j++)
            printf(
"%d ",a[i][j]);
        printf(
"\n");
    }

    
return 0;
}

结果:
posted on 2010-09-07 20:53 jince 阅读(224) 评论(0)  编辑 收藏 引用 所属分类: 算法设计与分析

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


哈哈哈哈哈哈