单循环赛贝格尔编排法实现

单循环赛,这宣布承认球队都必要与过剩的部分球队竞赛。,战场竞赛成果,订购地点数。当群是奇特的时,侧手翻的大批值得的敏捷的的大批。,在偶数时,侧手翻的大批值得的敏捷的的大批。减一。如5同一队必要丰满的竞赛。5轮,6同一队必要丰满的竞赛。5轮。

率先,引见了逆时针方向的旋转法。。应用球队的数字1开端编号,同一队平分分为两排。,左转1上下,正确的是从下到下。,构成人家U型框架。假使队的大批是单数,这么,在终于添加人家0”,凑成偶数。与0竞赛击中要害一列在推上。。万一现时7军务一列,加法人家0,凑成8支。战场以上所述影响安顿群,这么摆布两行平行的衔接。,第大约竞赛的构成,即1-02-73-64-5,一列1在侧手翻上。另外的迂回地的开端,左上角不变的数1,其他的数字被设想成人家环。,逆时针方向的方向稍微移动人家地方地,构成另外的圆桌。如此等等,每迂回地稍微移动人家地方地,性格过剩的循环的编排表。终极构成表列举如下:

   二      五    七

10 17
1
6 15 14 13
1
2

27 06
7
5 64 53 42
3
0

36 25
0
4 73 62 50
4
7

45 34
2
3 02 70 67
5
6

殷勤的在意,将从第人家瞥见4轮开始,一列6一队竞赛不断地坚持一周空气。,这是逆时针方向的旋转的缺陷。,即另外的轮的轮空队从四的轮开始,每轮都有第大约的球队。

伯杰超过方式与逆时针方向的旋转ME类似。,但有两个不同点。人家是最大大批的更迭不变的(或0在左上角和右上角,电流的旋转在左上角。,下大约被不变的在右上角。。二是不变的最大数(或0)后,过剩的的数字被设想成人家环。,稍微移动必然消隐,同一消隐是由群的大批决定的。:

队数消隐数

<=4      0

5 – 6
   1

7 – 8
   2

9 -10
   3

11-12
  4

13-14
  5


    

万一有nn>=4)军务一列,区间数的计算表情是(n+n%2-4)/2

同一以7军务一列为例,第大约或

1 – 0

2 – 7

3 – 6

4 – 5

另外的轮将0稍微移动到左上角,过剩的的数字来自某处1开端逆时针方向的稍微移动2个消隐,嗨1将被移至手迹4地方的地方地

 

第接轮将0稍微移动到右上角,过剩的的数字持续逆时针方向的稍微移动。2个消隐

 

其他的旋转规律是使相等的。,终于的编排表列举如下

 

编码创造的思惟列举如下,最大大批的地方地仅安心PREVI的地方地。,过剩的部分数字按顺序超过。,整洁。因而只必要决定1的地方地,过剩的部分地方地的数字可以被决定。。在第大约中按编号编号的地方地1-8。在第大约,1在地方地1上。另外的轮,1稍微移动2个消隐,可以懂得为稍微移动。3个地方地,即1+3=4,取模,(1+3)%7=4,因而1稍微移动到地方地4。第接轮,持续稍微移动3个地方地,(4+3)%7=0,嗨0执意7,也执意1稍微移动到地方地7。四的轮,(7+3)%7=31稍微移动到地方地3。如此等等。要紧的是要在意,认为1稍微移动到地方地和脚后跟0冲,稍微移动到绝对地方地。0在地方地8,这么1就稍微移动到地方地10在地方地11就稍微移动到地方地8

 1void BegerArrangement(intnAmount)
 2 {
 3    
if (nAmount < 2 ||nAmount >
90 )
 4        
return;
 5
 6    
// 队大批
 7    
int nFixAmount = nAmount;
 8    
// 终于一队的人数
 9    
int nLastPlayerNo = nAmount;
10    
// 单数一列,机构傀儡群,终于一队的人数为0
11    
if(IsOdd(nAmount))
12     {
13         ++nFixAmount;
14         nLastPlayerNo =
0;
15     }
16    
// 轮数
17    
intnMaxRound = nFixAmount-1;
18    
intnHalfAmount = nFixAmount /
2;
19
20    
// 打手势相间的
21    
intnStep = nFixAmount <= 4 ?
1 : (nFixAmount –
4) /
2 +
1;
22
23    
intnRound =
1;
24    
intnFirstPlayerPos =
1;
25    
intnLastPlayerPos =
1;
26    
intresult[100][200]
= {
0 };
27    
while(nRound <= nMaxRound)
28     {
29        
// 每回终于人家球员的地方地都必要摆布。
30         nLastPlayerPos = nFixAmount +
1 – nLastPlayerPos;
31
32        
if(nRound ==
1)
33             nFirstPlayerPos =
1;
34        
else
35             nFirstPlayerPos = (nFirstPlayerPos+ nStep) % (nFixAmount –
1);
36
37        
if(nFirstPlayerPos ==
0)
38             nFirstPlayerPos = nFixAmount –
1;
39
40        
if(nFirstPlayerPos == nLastPlayerPos)
41             nFirstPlayerPos = nFixAmount +
1 – nLastPlayerPos;
42
43        
for (int i =
1; i<= nHalfAmount; ++i)
44         {
45            
int nPos[2] = { i, nFixAmount – i +
1 };
46            
int nPlayer[2] = {
0,
0};
47            
for (int j =
0; j < 2;++j)
48             {
49                
if (NPOS) == nLastPlayerPos)
50                     nPlayer[j] =nLastPlayerNo;
51                
elseif (NPOS) 52                     nPlayer[j] = nFixAmount -nFirstPlayerPos + 非营利安排〔J〕
53                
else
54                     nPlayer[j] = 非营利安排〔J〕 -nFirstPlayerPos +
1;
55
56                 结实[我1][(nRound-1)*2+j]
= nPlayer[j];
57             }
58         }
59
60         ++nRound;
61     }
62
63    
for (int i =
1; i<= nMaxRound; ++i)
64     {
65        
if( i ==1 )
66             printf(“%3s%-3d|”,
“r”, i);
67        
else
68             printf(“%4s%-3d|”,
“r”, i);
69     }
70     printf(“\n”);
71
72    
for (int i =
0; i< nHalfAmount; ++i)
73     {
74        
for (int j =
0; j< nMaxRound; ++j)
75         {
76             printf(“%-2d-%2d | “, result[i][j*2],
result[i][j*
2+1]);
77         }
78         printf(“\n”);
79     }
80
81     printf(“\n\n”);
82 }

编码地址

介绍人

=enterbtn

=enterbtn

发表评论

电子邮件地址不会被公开。 必填项已用*标注