目   录

1、问题

2、问题分析

3、程序代码(非递归)

4、程序代码(递归)

5、总结


1、问题

锦标赛问题:设计一个满足以下要求的比赛日程表:

(1)每个选手必须与其他n-1个选手各赛一次;

(2)每个选手一天只能赛一次;

(3)循环赛一共进行n-1天。

要求:给出二分法设计算法的伪码。

2、问题分析

3、程序代码(非递归)

#include <iostream>
using namespace std;#define N 8 // 运行结果正确,但是N不能太大,不然一个屏幕占不下void table(int a[][N + 1], int n)
{int i, j, t, temp;for (t = N; t >= 4; t = t / 2) // 因为前4个格子已经填好,所以不必循环到t==2。迭代处理,依次处理2^2, …, 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];}
}int main()
{cout << N << "名运动员比赛日程安排表" << endl << endl;int n, i, j, a[N + 1][N + 1] = {0}; // n=2^k(k≥1)个选手参加比赛,二维数组a表示日程安排,数组下标从1开始(方便计算和书写)n = 2;                              //先将左上角四个数写出来a[1][1] = 1;a[1][2] = 2;a[2][1] = 2;a[2][2] = 1;table(a, n);cout << "选手" << "\t";for (i = 1; i <= N - 1; i++){cout << "第" << i << "天" << "\t";}cout << endl;for (i = 1; i <= N; i++){for (j = 1; j <= N; j++)cout << a[i][j] << "\t";cout << endl;}getchar();getchar();return 0;
}

4、程序代码(递归)

#include <iostream>
#include <algorithm>
using namespace std;#define N 8void table(int a[][N], int n, int temp)
{int i, j;if (n == 2){a[1][1] = 1;a[1][2] = 2;a[2][1] = 2;a[2][2] = 1;}else{temp = temp / 2;table(a, n / 2, temp);//填左下角元素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];}
}int main()
{int a[N][N] = {0}, temp = N, i, j;table(a, N, temp);cout << N << "名运动员比赛日程安排表" << endl << endl;cout << "选手" << "\t";for (i = 1; i <= N - 1; i++){cout << "第" << i << "天" << "\t";}cout << endl;for (i = 1; i <= N; i++){for (j = 1; j <= N; j++)cout << a[i][j] << "\t";cout << endl;}getchar();getchar();return 0;
}

5、总结

其实递归与非递归差别并不大,循环赛问题的核心在于怎么由左上角的一个求出其他三个,或者由左上角及左下角的两个求出另两个(这是其他博主的做法),其实归根到底思路都是一样的,都是求坐标之间的关系。分析代码前先把讲解看懂,此题并不难。我也是学生,所以代码没有那么复杂,希望能给大家带来帮助。

分治法【锦标赛问题:设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。】相关推荐

  1. 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素

    查找问题: 问题一:寻找一个序列中第k小的元素 对于给定的含有n个元素的无序序列,求这个序列中第k(1<=k<=n)小的元素 分析思路: 假设无序序列存放在a[0 - n-1]中,若将a递 ...

  2. python应用——分治法实现循环赛

    一.要求 用分治法实现循环赛: 一共有n个选手要进行循环赛,请设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次: (3)当n 是偶数,循 ...

  3. 【算法设计与分析】-- 分治法

    1.分治法的基本思想 分治法的基本思想是将一个规模为n的问题分解为k个规模为较小的子问题,这些子问题互相独立且与原问题相同,递归地求解这些子问题,然后利用子问题的解合并出原问题的解. 2.分治算法的设 ...

  4. 分治法解决循环赛日程表

    分治法解决循环赛日程表 问题描述 设有n=2^k个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次. (2)每个选手一天只能比赛一次. ( ...

  5. 【分治法】解决循环赛问题(n分为奇数和偶数)

    原文地址:https://ericpengshuai.github.io/suan-fa/cd0cd01e2295.html 例题 设有N个运动员要进行网球循环赛,设计一个满足以下要求的比赛日程表 ( ...

  6. 循环赛日程表算法——分治法

    一.问题描述: 设有n=2^{k}个选手要进行网球循环赛,要求设计一个满足以下要求的比赛日程表: (1)个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次. 按此要求,可将比赛日程表 ...

  7. 循环赛日程表--分治法

    设有n=2^k个运动员,要进行网球循环赛.现在要设计一个满足以下要求的比赛日程表,每个选手必须与其他n-1个选手各赛一场,每个选手一天只能赛一次,循环赛一共进行n-1天,将比赛日程表设计成n行n列,表 ...

  8. 循环赛日程表(分治法)

    设有n=2^k个运动员,要进行网球循环赛.现在要设计一个满足以下要求的比赛日程表: (1).每个选手必须与其他n-1个选手各赛一场 (2).每个选手一天只能赛一次 (3).循环赛一共进行n-1天 思路 ...

  9. 分治法之循环赛日程表的理解和解题思路

    一. 问题: 设有n=2^k个运动员,要进行网球循环赛.现在要设计一个满足以下要求的比赛日程表 (1)每个选手必须与其他n-1个选手各赛一场 (2)每个选手一天只能赛一次 (3)循环赛一共进行n-1天 ...

最新文章

  1. 批处理下的 cd 与 cd /d 命令
  2. 201521123032 《Java程序设计》第7周学习总结
  3. python变量分类_Python 入门系列 —— 5. 三大变量类型介绍
  4. 英语总结系列(七):Spring
  5. PHP数组的使用方法小结
  6. 【GNN】一份简短入门《图神经网络GNN》笔记小册
  7. Hibernate常用查询
  8. 企业信息化战略与实施(2)信息系统生命周期与战略规划方法
  9. GitHub微信防撤回项目 for Mac
  10. html 时间控件滚动选择器,TimePicker
  11. Python int()使用小结
  12. PMSG永磁同步发电机并网仿真模型
  13. 一直无缝滚动的轮播图模板
  14. 于Cd(Ⅲ)金属有机骨框架的新型造影剂Cd-MOF/Gd-DTPA/DMPE-DTPA-Gd-DMPE/
  15. 运维入门之CPU平均负载及问题排查
  16. STM32点亮led的详细步骤
  17. Java定时任务技术分析
  18. opencv中的GMM(混合高斯分布)算法原理及C++实现(BackgroundSubtractorMOG)
  19. yara规则学习与使用
  20. IIR滤波器设计代码(巴特沃斯+脉冲响应不变法/双线性变换法) Matlab代码

热门文章

  1. java中打印输出数组内容的三种方式
  2. 7系列mrcc xilinx_XILINX 7系列FPGA_时钟篇
  3. linux界面添加地址,Linux系统下图形界面更改IP地址
  4. java输入数量扑克牌排序_Java扑克游戏(多人多牌数比较游戏)的实现
  5. mysql 数据泵导入导出_【Oracle篇】约束和数据泵导入导出
  6. 八十二、归并排序求取复杂的逆序数
  7. 二十二、 深入Python的进程和线程(上篇)
  8. 三、数据分析前,打下数据处理基础(下)
  9. 十九、深入Python匿名函数
  10. EM算法和GMM(下)