循环赛日程表

问题描述:设有n=2的K次方个运动员要进行乒乓球循环赛。现在要设计一个满足一下条件的比赛日程表:

  1. 每个选手必须与其它n-1个选手各比赛一次;
  2. 每个选手一天只能赛一次;
  3. 循环赛一共进行n-1天。

按此要求可将比赛日程表设计成有n行和n-1列的表。在表中第i行和第j列处填入第i个选手在第j天所遇到的选手。

当有8名选手时,日程安排样例如下图所示:

算法设计如下:

package com.bean.algorithmbasic;public class TournamentSchedule {private int array[][];public TournamentSchedule() {array = new int[8][8];for (int i = 0; i < 8; i++)array[i][0] = i + 1;}public TournamentSchedule(int n) {array = new int[n][n];for (int i = 0; i < n; i++)array[i][0] = i + 1;}/** a代表待求矩阵行的起始下标,b代表待求矩阵行的终止下标,下同 i代表待求矩阵列的起始下标,j代表待求矩阵列的终止下标,下同*/public void schedule(int a, int b, int i, int j) {if (i < j) {schedule(a, (int) (a + b - 1) / 2, i, (int) (j + i - 1) / 2);schedule((int) (a + b + 1) / 2, b, i, (int) (j + i - 1) / 2);merge(a, (int) (a + b - 1) / 2, i, (int) (j + i - 1) / 2, "top");merge((int) (a + b + 1) / 2, b, i, (int) (j + i - 1) / 2, "bottom");}}public void merge(int a, int b, int i, int j, String s) {int lenth = b - a + 1;if (s.equals("top")) {for (int p = a; p <= b; p++) {for (int q = i; q <= j; q++)array[p + lenth][q + lenth] = array[p][q];}} else if (s.equals("bottom")) {for (int p = a; p <= b; p++) {for (int q = i; q <= j; q++)array[p - lenth][q + lenth] = array[p][q];}}}public void printSchedule() {int n = array.length;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++)System.out.print(array[i][j] + "  ");System.out.println();}}public static void main(String[] args) {TournamentSchedule tournamentSchedule = new TournamentSchedule();tournamentSchedule.schedule(0, 7, 0, 7);System.out.println("8名选手参加循环赛的日程表如下:");System.out.println();tournamentSchedule.printSchedule();}
}

运行结果:

8名选手参加循环赛的日程表如下:

1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1

(完)

JAVA代码—算法基础:循环赛日程表相关推荐

  1. JAVA代码—算法基础:数独问题(Sodoku Puzzles)

    JAVA代码-算法基础:数独问题(Sodoku Puzzles) 数独问题(Sodoku Puzzles) 数独游戏(日语:数独 すうどく)是一种源自18世纪末的瑞士的游戏,后在美国发展.并在日本得以 ...

  2. JAVA代码—算法基础:拨号键盘的字母组合问题

    拨号键盘的字母组合问题 问题描述 给定一个数字串,返回这个数组串所表示的所有可能的字母组合. 数字和字母的映射关系类似于一个手机的拨号键盘,如图所示: 例如:输入数字串"23" 返 ...

  3. JAVA代码—算法基础:马走8×8棋盘问题

    经典问题:给定一个8×8棋盘,马从任意位置开始,走"日"字,不重复的走完棋盘上的所有位置. 如图所示: 假设从坐标为(2,2)的点开始走,有8个方向可以选择.所以每次都要依据这最多 ...

  4. JAVA代码—算法基础:切割钢锯条售卖的问题

    切割钢锯条售卖 题目描述:给定一段长度为n英寸的钢条和一个价格表,求切割方案,使销售收益Rn最大. 注:若长度为n英寸的钢条的价格Pn足够大,最优解可能就是完全不需要切割. 长度(i) 1 2 3 4 ...

  5. 递归与分治策略算法之循环赛日程表

    递归与分治策略算法之循环赛日程表 1.先简单的来介绍一下分治策略的思想 分治策略的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,分解出来的子问题与原问题相同,并且相互独立.通过递归去解决子 ...

  6. python实现循环赛日程表问题的算法_循环赛日程表的分治算法实现实验报告gxl.doc...

    循环赛日程表的分治算法实现实验报告gxl PAGE PAGE 2 深 圳 大 学 实 验 报 告 课程名称: 算法设计与分析 实验项目名称: 分治算法 --矩阵相乘的Strassen算法及时间复杂性分 ...

  7. python实现循环赛日程表问题的算法_循环赛日程表的分治算法实现实验报告_gxl.doc...

    循环赛日程表的分治算法实现实验报告_gxl 深 圳 大 学 实 验 报 告 课程名称: 算法设计与分析 实验项目名称: 分治算法 --矩阵相乘的Strassen算法及时间复杂性分析 或--循环赛日程表 ...

  8. python【数据结构与算法】循环赛日程表(分治)

    文章目录 1 概述 2 解决 1 概述 设计一个满足以下要求的比赛日程表: 每个选手必须与其他n-1个选手各赛一次: 每个选手一天只能赛一次: 循环赛一共需要进行n-1天. 由于n=2^k个运动员,显 ...

  9. 烧水壶java代码_JAVA代码—算法基础:水壶分水的问题

    package com.bean.algorithmbasic; public class WaterAndJugProblem { /* * 给你两壶容量的X和Y升.有无限量的水供应.你需要确定它是 ...

最新文章

  1. db2 clob转mysql 的_Java中查询db2的clob列的问题
  2. UA MATH563 概率论的数学基础 鞅论初步2 条件期望的应用:推导二元随机变量的条件概率与条件期望
  3. wordpress相关插件及应用模板
  4. python多项式回归_在python中实现多项式回归
  5. java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)
  6. 在im4java中使用GraphicsMagick
  7. mysql 会话级别的参数_PostgreSQL的参数设置级别及查询各级别的参数值
  8. loadrunner自学笔记-性能测试的注意要点
  9. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
  10. ACL2022奇葩标题大赏
  11. 如何安装python解释器_python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器...
  12. android,java知识点总结 (二)
  13. 基于Android和Java的校园外卖系统设计与实现
  14. 开源电子表格Luckysheet强势推出在线协作
  15. Android实现搜索手机内的PDF文件
  16. Java使用POI操作XWPFDocument中的XWPFParagraph(段落)对象的属性略解
  17. .NET的那些事儿(9)——C# 2.0 中用iTextSharp制作PDF(基础篇)
  18. 组装电脑中毒文件夹变exe文件寻回办法
  19. 教主黄仁勋亮相GTC China:英伟达已售出15亿块GPU!重磅发布TensorRT 7
  20. CSS 指层叠样式表 (Cascading Style Sheets) 和选择器

热门文章

  1. 天才只意味着终生不懈地努力——俄国化学家 门捷列耶夫
  2. Huffman编码C实现
  3. bootstarp元素靠右或者靠左排列
  4. 打开svn时出现 R6034
  5. 基于python的pca实现(附代码)
  6. 爬虫-微博个人主页的获取
  7. 實用英語吵架一百句....
  8. 宽屏html5网络科技有限公司官网单页面响应式模板
  9. 同一类型的计算机指令系统,不同类型的CPU指令集不同,指令系统一样吗?
  10. 洛谷P2396 yyy loves Maths VII【状压dp】