编程语言
首页 > 编程语言> > c#-再见%4的双重淘汰赛算法

c#-再见%4的双重淘汰赛算法

作者:互联网

我正在尝试编写一场Double Elimination锦标赛,其中括号是基于mod 4的.第一轮应该处理所有的再见,这样在第二回合之后就不会再有再见了.我很难确定要确定的拜拜数量之后的实际数学运算.如果有人可以帮助我进行数学计算,将不胜感激.

我需要处理1,2,3的再见,对于mod 4(0,1,2,3),有4种可能的答案.

我的意思是一个例子
共有13位玩家(13%4 = 1)
因此第1轮的括号应该看起来像
1对2
2vs3
3比4
4比5
5vs6

第二轮是
7VS冠军
8VS冠军
9VS冠军
赢家vs赢家,然后您有输家

基本上,如果您熟悉网站Challenge,我想生成与它们类似的括号,但是我无法弄清楚它们确定再见背后的数学原理.

如果有人做了类似的事情,我将非常感谢他的帮助.

解决方法:

其中N是参赛者人数,回合数为:

nRounds = Math.Ceiling( Math.Log( N, 2 ) );

第一轮的插槽数为:

firstRoundSlots = Math.Pow( 2, nRounds );

排名靠前的竞争对手获得了再见,因此在您的示例中,第16轮中有13位竞争对手,因此排名前3位的竞争对手得到了再见.换句话说,再见的数量是firstRoundSlots-N.

回合的顺序稍微复杂一些.基本上,总决赛的争夺是第二名,最好的竞争对手.在半决赛中,最好的竞争对手与第三名,第二名,第四名并列.等等等等.因此,从总决赛倒退以生成订单是最容易的.

但是,如果您想了解一种用于反向生成回合订单的算法(即从第一轮开始并逐步进入决赛),我在这里写了一篇有关该主题的博客文章:

http://blogs.popart.com/2012/02/things-only-mathematicians-can-get-excited-about/

标签:tournament,c,algorithm,math
来源: https://codeday.me/bug/20191201/2080299.html