zoukankan      html  css  js  c++  java
  • 循环赛日程表问题

    输入正整数k表示有n=2^k个运动员进行循环比赛,需要设计比赛日程表。每个选手与其他n-1个选手各赛一次;每个选手一天只能赛一次;循环赛一共进行n-1天。

    按此要求设计一张比赛日程表,该表有n行和n-1列,第i行第j列表示第i个选手第j天遇到的选手。

    分析:

    本题的方法有很多,递归是其中一种比较容易理解的方法。 如下图所示是k=3时的一个可行解(第1列是选手编号),它是4块拼起来的。 左上角是k=2时的一组解,左下角是左上角每个数加4得到,而右上角、 右下角分别由左下角、 左上角复制得到。

    递归,每一次分为4个区域来处理。当然,也可以根据上面分析的规律直接模拟填充数组即可。循环k-1次,每一次填充除了左上角之外的另外3个区域。

    代码参考:

    http://www.cnblogs.com/crx234/p/5988418.html

    http://blog.csdn.net/liufeng_king/article/details/8488421

    递归的划分过程可以参考残缺棋盘的划分过程。

    下面是循环填充的代码

     1 #include <stdio.h>
     2 #define MAX 101
     3 //问题表示
     4 int k;             //求解结果表示
     5 int a[MAX][MAX]; //存放比赛日程表(行列下标为0的元素不用)
     6 void Plan(int k)
     7 {   int i,j,n,t,temp;
     8     n=2;            //n从2^1=2开始
     9     a[1][1]=1; a[1][2]=2; //求解2个选手比赛日程,得到左上角元素
    10     a[2][1]=2; a[2][2]=1;
    11     for (t=1;t<k;t++)      //迭代处理2^2(t=1)…,2^k(t=k-1)个选手
    12     {
    13         temp=n;             //temp=2^t
    14         n=n*2;              //n=2^(t+1)
    15         for(i=temp+1;i<=n;i++ )    //填左下角元素
    16            for(j=1;j<=temp;j++)
    17                a[i][j]=a[i-temp][j]+temp;
    18         for(i=1;i<=temp;i++)//填右上角元素
    19             for(j=temp+1;j<=n;j++)
    20                 a[i][j]=a[i+temp][(j+temp)%n];
    21         for(i=temp+1;i<=n;i++)//填右下角元素
    22             for(j=temp+1;j<=n; j++)
    23                 a[i][j]=a[i-temp][j-temp];
    24     }
    25 }
    26 int main()
    27 {
    28     Plan(3);
    29     for(int i=1;i<=3;i++)
    30         {
    31             for(int j=1;j<=3;j++)
    32                 printf("%d ",a[i][j]);
    33             printf("
    ");
    34         }
    35     return 0;
    36 }
  • 相关阅读:
    九、springboot整合RabbitMq 用死信队列做延迟队列
    八、RabbitMq死信队列与延迟队列
    七、RabbitMq交换机
    六、RabbitMq 发布确认模式(confirm模式)
    五、RabbitMq的消息应答机制
    四、RabbitMq的工作模式( Work Queues)
    三、RabbitMq简单模式(hello world)
    qt 使用属性设置替换样式,为无setstylesheet接口的的action设置样式
    SpringBoot配置国际化
    基于策略模式的前端表单设计
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/6904533.html
Copyright © 2011-2022 走看看