递归与分治策略之循环赛日程表Java实现

递归与分治策略之循环赛日程表

一、问题讲述

盼得最长宵,数尽厌厌雨。无处不难过,轻尘在玉琴。

留存n=2^k个运动员要举办网球循环赛。现要设计一个满意以下要求的较量日程表:

嗬,我欲与乘风归去,又恐琼楼玉宇,高处不胜寒呐,玩心境学有点难受啊。那点不爽是怎样吧?那点不爽有点没意思,有点扫兴,有点后背痒却又挠不着的觉得,有点欲求不满,有点摸不到边际却又若隐若现,像雾像雨又像风的意思。这一点不爽就接近喝了几瓶葡萄酒刚上酒瘾,理性与感性在做斗争的时候,旁人就起来在说少喝点。这一点不爽就是隐隐约约令人深感欠缺点什么?这一点不足就类似喝咖啡少了芝士,吃牛排少了苦艾酒,唯有马云没有马化腾,只有大概思维并未壹心情。

网球,  (1)每个选手必须与此外n-1个运动员各赛两遍;

这就是说这一点不足到底是如何吧?要想知道这点不足,还得回过头来看看欠缺的侧重点是何许?心情学。心经济学又是咋样吧?心文学是一门探讨一个人一生爱恨情仇,生离死其余法门。心绪学就是从这有限中拓展出的可是。心境学就是一门琢磨人的不易。情感学就是一个太极,最简便易行的曼荼罗。倒是有些看头,太极中有黑有白,有对有错,有超我也有本我,白即是黑,黑即是白,白中有黑,黑中有白,黑黑白白,白白黑黑,老鼠老虎,傻傻分不清楚。那么既然是研商人的不错,那么人到底是怎样?有灵有肉,有心有身,灵灵肉肉,身身心心,也有点意思,这一点意思是有点完整的意味。那么激情学就展示有些没意思了。为何没意思,自由联想,意识,潜意识,内观,冥想,解梦,精神分析,分析心境,家庭系统排列,叙事疗法,TA沟通分析,RFT,ACT疗法,ABC,CBA,都是在谈心,对于人的话,只有心, 或者说心情,就缺失个身,或者说身体,肉身。

  (2)每个选手一天只可以参赛一回;

人身就是一辆不屈不挠开往死亡的火车,下边却承载着精神。科学也没看头得声明化学物质会潜移默化心情健康。那个化学物质是多巴胺,五羟色胺,吧啦吧啦。所以仍然要多吝惜自己的身体一点点,再多一点点,因为我们还有意在要到位。

  (3)循环赛在n-1天内停止。

身体作为火车就需要修补,毕竟人体也就像机器,需要动用和锻练,不用也会“生锈”。现在的人喜欢乘坐电梯和开车,大鱼大肉,吃好喝好,一切都贪图便宜,肢体却喜欢折腾,需要练习。不锻练,身体也就处于亚健康。

  按此要求将竞技日程表设计成有n行和n-1列的一个表。

谈到运动。网球。高尔夫。橄榄球。冲浪。攀岩。相比较流行,却不够潮流。时下,心思学正即流行也风尚,所以心情学的伴侣也亟需流行和潮流。这样配合才门当户对,郎才女貌。

  在表中的第i行,第j列处填入第i个运动员在第j天所遭逢的健儿。

为此自己要介绍一个风尚又时兴的活动。那么些运动没有时间和空中限制,且一个人就足以拓展。女孩子练了足以拥有翘臀丰胸,男人练了可以增强性能力。这项活动还和情绪学搭界,故又能身心合一,从新找到和“人”的链接。

中间1≤i≤n,1≤j≤n-1。8个运动员的竞技日程表如下图:

玩心情学搭配那项活动,就象是香蕉遇到牛奶,龙舌兰邂逅咖啡,不言而喻就是完美。

网球 1

玩这项活动有5个便宜:

二、解决思想

1,促进肢体健康。现代的人夏日开空调,冬季开暖气,久而久之就有办公室白领综合病,玩这项活动可以推进肢体健康。

  按分治策略,我们可以将持有的选手分成两半,则n个运动员的交锋日程表可以经过n/2个运动员的竞赛日程表来支配。递归地用这种一分为二的政策对运动员举办划分,直到只剩余五个选手时,比赛日程表的成立就变得很简单。这时只要让这两个选手举行较量就足以了。

2,减弱工作压力,跳出不好心理和做事境况的范畴。当身体处压力的动静下,更易于犯错,健忘,发生过激反应或者不必要的决斗。这项运动可以令人注目在时下此地此景此情这个人,通过反复人工呼吸磨练,由于注意可以使人冷落,面对问题再一次聚焦,提升认知程度。

  如上图,所列出的正方形表是8个选手的竞技日程表。其中左上角与左下角的两小块分别为选手1至选手4和选手5至选手8前3天的较量日程。据此,将左上角小块中的所有数字按其相对位置抄到右下角,又将左下角小块中的所有数字按其相对地点抄到右上角,这样我们就分别配备好了选手1至选手4和选手5至选手8在后4天的交锋日程。依此思想容易将以此竞赛日程表推广到具有自由三个选手的情况。

3,锻练领导力量。没有什么比号召一群志同道合的人在一道训练一项有意思的位移更幽默了。

三、代码实现

4,提升功能和创建力。这项活动不仅可以锻练肌肉,还是能进行思维,因为在进展这项活动的时候,你必须想下一步我要做哪些动作,相比较连贯,相比较相符自己。毕竟每个人的体质都不可同日而语。心情学常说认识自己,那么认识自己的灵魂首要,认识自己的血肉之躯也很重大。这也是这项活动的魅力所在。

 1 package cn.com.zfc.everyday.test;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 
 7  * @title RoundRobinSchedule
 8  * @describe 循环赛日程表:
 9  *           设有n=2^k个运动员要进行网球循环赛。
10  *           现要设计一个满足以下要求的比赛日程表:
11  *           (1)每个选手必须与其他n-1个选手各赛一次;
12  *           (2)每个选手一天只能参赛一次;
13  *           (3)循环赛在n-1天内结束。
14  *           按此要求将比赛日程表设计成有n行和n-1列的一个表。
15  *           在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。
16  * @author 张富昌
17  * @date 2017年4月9日下午9:22:42
18  */
19 public class RoundRobinSchedule {
20     public static void main(String[] args) {
21         Scanner scanner = new Scanner(System.in);
22         System.out.println("请输入 k 的值(2^k个运动员)");
23         int k = scanner.nextInt();
24         scanner.close();
25         // 求运动员人数
26         int n = 1;
27         for (int i = 1; i <= k; i++) {
28             n = n * 2;
29         }
30         // 创建二维数组作为日程表
31         int[][] array = new int[n + 1][n + 1];
32         // 制作日程表
33         table(k, array, n);
34         // 输出日程表
35         printTable(array, n);
36     }
37 
38     /**
39      * 
40      * @param k:2^k个运动员
41      * @param a:循环赛日程表
42      * @param n:运动员的人数
43      */
44     private static void table(int k, int[][] a, int n) {
45         // 设置日程表第一行
46         for (int i = 1; i <= n; i++) {
47             a[1][i] = i;
48         }
49         // 每次填充时,起始填充位置
50         int m = 1;
51         for (int s = 1; s <= k; s++) {
52             n /= 2;
53             for (int t = 1; t <= n; t++) {
54                 // 控制行
55                 for (int i = m + 1; i <= 2 * m; i++) {
56                     // 控制列
57                     for (int j = m + 1; j <= 2 * m; j++) {
58                         // 右下角等于左上角的值
59                         a[i][j + (t - 1) * m * 2] = a[i - m][j + (t - 1) * m * 2 - m];
60                         // 左下角等于右上角的值
61                         a[i][j + (t - 1) * m * 2 - m] = a[i - m][j + (t - 1) * m * 2];
62                     }
63                 }
64             }
65             m *= 2;
66         }
67     }
68 
69     // 输出日程表
70     private static void printTable(int[] array[], int n) {
71         for (int i = 1; i <= n; i++) {
72             for (int j = 1; j <= n; j++) {
73                 System.out.print(array[i][j] + " ");
74             }
75             System.out.println();
76         }
77     }
78 }

5,提升和维系磨炼的能动。有时候,我们是因为总总原因大家会错过五次肢体磨炼,比如说跑步或者健身,而发生不良心情,诸如内疚。可是,这项运动的特点在于随时随地,故而相比吻合人们长时间坚定不移不懈,量变达成质变,人们会为此有成就感而倍感畅快。

测试结果:

那么这项运动究竟是咋样?

网球 2

这项运动是瑜伽,来自于一个神奇的国度的一个古老的移动。

 

下犬式。轮式。战士三式。舞王式。尸解式。以类微微你的无助,以类微微你的悲惨。

毫无疑问,瑜伽术前呼吸和术后苏醒都相当精美,就不谈瑜伽术中的各个凹凸扭曲造型了。

术前深呼吸的美观在于当人旁坐莲花专注在温馨的深呼吸的时候,有点内观和冥想的含意,还有淡淡的禅意,杂念在大脑叫嚣,专注在和谐的一呼一吸就和身体有了链接。任由杂念在起哄,专注在融洽的深呼吸不去管它的时候,还不怎么暗爽。

这拉痛的经络使人更是灵活。听闻道路是弯曲,所以我得有一副柔韧的肌体,好利索应对各个磕磕绊绊。

瑜伽术后休息术的名特优在于,当身体磨练完后,肌肉锻炼也获取了休息,这些时候,整个人躺在垫子上,伴随着瑜伽休息指点语和音乐,运动完后多巴胺起首分泌,身体已经累趴又赢得放松,专注在温馨的深呼吸又微微和星空同呼吸,宇宙同命运的非凡感觉,休息术截止后,整个人也愈发舒适,身体进一步轻盈,睡觉质地也获取增强,这就是个良性的大循环。

故而,心思学也得有个伴侣,这么些伴侣是怎么吧?就是瑜伽。