将球员推进到下一场比赛 - 锦标赛括号(需要一些逻辑)

Posted

技术标签:

【中文标题】将球员推进到下一场比赛 - 锦标赛括号(需要一些逻辑)【英文标题】:Advance players to next match - Tournament Brackets (Need some Logic) 【发布时间】:2012-08-22 10:23:24 【问题描述】:

我很难想出一种合乎逻辑的方法来让玩家晋级我的锦标赛分组中的新比赛。您可以在此处查看示例:http://www.stickyflames.com/brackets.php?id=3

比赛从 1 到参加比赛的玩家人数。 (在示例中为 1-8)。 使用问题的第一部分来查看我的比赛是如何设置的:How to determinate round by element in tree (Tournament brackets)?

这里有一个场景来演示: Example1 赢得了他的比赛,所以他被扔到了第 5 场比赛的第 1 场。而 Example2 赢得了他的比赛,并进入了第 5 场的第 2 场比赛。 另一方面,Example3 和 Example4 被放入 M6 槽中。

你们中的任何人都知道一些数学算法,可以计算出他们应该结束的比赛吗? (插槽可以使用模数确定,所以不用担心)

非常感谢。

【问题讨论】:

【参考方案1】:

编辑:这是他正在寻找的答案。根据匹配计算回合数:

Math.round(match# / 2) + Round-1-match-count

很高兴你能自己解决:]

另一种看待它的方式:

让我们在这里重新设计问题。现在看来你正在适应这种树

1 
      5       
2
          7
3 
      6  
4   

类似的东西,你有点想要一个算法,将得到 1/2 到 5、3/4 到 6 等等。我敢打赌你可以为此制定一个公式,但它可能比必要的复杂一点。如果你想一想,1/2 永远不必输入 6,3/4 永远不必输入 5,等等。事实上,我认为这样看会更容易、更准确:

0a 
      2a       
1a
          3a
0b 
      2b  
1b   

想知道你的代码现在是如何格式化的,但如果你想区分它们,你可以做 a's 和 b's 。

现在向上移动的算法只是

if (spot == 0)  
    spot=spot+2;     //we'll move it to the next because 0 is the only exception
 else              //if odd  
    spot=spot+1;     //ideally we only need to add one to move to the next bracket

您可以使用parseInt 仅获取号码。可是等等!因为它们是相同的编号,它如何知道要去哪个插槽?这就是我们可以使用字母的原因。字符串最酷的地方在于,它们只是串在一起的字符数组。示例:

var word = "Hello";
word[0] = "H";

所以你可以通过spot[1] 访问这封信,这样你就可以确保a 与a 一致,b 与b 一致。希望这会有所帮助。

哦,还有最后一件事。您可能想知道 3a 怎么样?那里没有b。好吧,我不完全确定你是否想要一封信,但如果你确实想要它,你可以让你的代码看看是否存在 a b 。如果没有,则将其放入 a 中,因为这是它唯一可以去的地方。

【讨论】:

感谢任何帮助,我将等待最终结果。在过去的几天里,这一直困扰着我,当涉及到逻辑问题时,我几乎不需要帮助。 :D 好的,我修好了。我想在我的情况下,0/1 情况下总会有那个尴尬的时刻。之后,您只需添加 1 即可进入下一阶段。我觉得应该可以。希望这可以帮助。如果您有任何需要澄清的地方,请发表评论! 好的,我喜欢这个答案(如果这就是我设置锦标赛的方式:P)。不幸的是我没有。就目前而言,数据库包含: tourney_id |比赛 | p1 | p2 |优胜者。因此,对于 1 的匹配,p1 将是 Example5,p2 将是 Example1。另外 - 如果 javascript 是你用来演示的舒适语言,那很好 - 我在这个脚本中使用 PHP,它没有太大区别,我可以将 JS 转换为 PHP。 其实我想我找到了解决办法。但是,您知道如何通过比赛编号计算出回合(回合 = 列 1、2、3 等)吗? (轮数可以在 2 到 64 之间变化。 过去一个小时我坐在床上,我找到了上一个问题的答案.. 太简单了哈哈。就是这样:Math.round(match# / 2) + Round-1-match-count。 IE,匹配 3:3/2 = 1.5(四舍五入 = 2),2+4 = 6。认为这比实际情况要复杂得多,哈哈。 --在全球范围内工作。所以现在如果我匹配 6.. 6/2 = 3+4 = 7。哦,男孩。

以上是关于将球员推进到下一场比赛 - 锦标赛括号(需要一些逻辑)的主要内容,如果未能解决你的问题,请参考以下文章

单场淘汰赛算法

UPCOJ-5531 [COCI 2017-2018-1] - Hokej

[20191004机房测试] C++锦标赛

寻找跨时区的兼容时间

drupal 视图动态过滤器

带有用户输入的锦标赛括号(php?)