- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
不确定解决此问题的最佳方法?我想创建一个由 2、4、8、16、32 等团队组成的锦标赛分组。
前两场的胜者将与后两场的胜者对决,依此类推。一直到有赢家为止。 Like this
谁能帮帮我?
好的,更多信息。
最初我想想出一种方法来创建带有 2、4、8、16 等的锦标赛。然后,当所有用户都到位时,如果他们是 16 位玩家,则有 8 个固定装置。此时我会将夹具发送到数据库。
当所有获胜的玩家都进入下一轮时,我想再次对相遇的 2 名获胜者进行另一个 sql 查询。
你能明白我的意思吗?
最佳答案
几年前我做过这样的事情。这是很久以前的事了,我不确定我会用同样的方式来做(它并没有真正扩展到双重消除等)你如何输出它可能是一个不同的问题。我求助于 2002-2003 年的表格。今天肯定有更好的技术。
锦标赛的轮数为 log2(players) + 1,只要 players 是您在上面指定的数字之一。使用此信息,您可以计算出有多少回合。最后一轮包含最终获胜者。
我像这样存储玩家信息(为了最佳实践而调整这个)
Tournament
Name
Size
Players
Tournament
Name
Position (0 to tournament.size - 1)
Rounds
Tournament
Round
Position (max halves for each round)
Winner (player position)
请注意,在下面的所有查询中,我都没有使用“Tournament = [tournament]”来标识锦标赛。他们都需要它。
用一个查询来查询它并根据不同轮次的需要将其拆分是相当简单的。你可以做这样的事情来获得下一个对手(假设有一个)。对于第 1 轮,您只需要根据是偶数还是奇数来获得下一个/上一个玩家:
SELECT * FROM Players WHERE Position = PlayerPosition + 1
SELECT * FROM Players WHERE Position = PlayerPosition - 1
对于下一轮,如果用户的最后一个 Round.Position 是偶数,您需要确保下一个位置有赢家: 从轮次中选择球员位置 = [playerRoundPosition] - 1
如果没有,下一位选手还没有决定,或者有差距(不允许有差距!)
如果用户上一轮的位置是奇数,你需要确保他们下面有一个用户并且他们下面有一个赢家,否则他们应该自动晋升到下一轮(因为没有人玩)
SELECT COUNT(*) FROM Players WHERE Position > [Player.Position]
SELECT Player FROM Rounds WHERE Position = [playerRoundPosition] + 1
最后一点,我很确定您可以使用类似下面的内容来减少您编写的查询,方法如下:
SELECT Player FROM Rounds WHERE Position + Position % 2 = [playerRoundPosition]
SELECT Player FROM Rounds WHERE Position - Position % 2 = [playerRoundPosition]
更新:
查看我的原始帖子,我发现 Rounds table 有点模棱两可。实际上,它应该命名为 matches。一场比赛是两名选手之间的比赛,双方决出胜负。决赛 table 应该看起来更像这样(只是名字变了): 火柴 比赛 圆形的 位置(每轮最多半场) 获胜者(玩家位置)
希望这能让它更清楚一点。当两个玩家(在一场比赛中)相互对抗时,您将该信息存储在这个 Matches 表中。这个特定的实现依赖于 Match 的位置来知道哪些玩家参与了。
我开始从 1 开始对轮次进行编号,因为这在我的实现中更加清晰。如果您愿意,您可以选择 0(或者甚至做一些完全不同的事情,比如 go backwords)。
在第一轮比赛中,第 1 场比赛意味着玩家 1 和 2 参加了比赛。在第二场比赛中,3-4名球员参加了比赛。基本上第一轮只是玩家位置和位置+1 参加。如果您需要更多访问权限,您也可以将此信息存储在圆 table 中。每次我在程序中使用这些数据时,无论如何我都需要所有回合和玩家信息。
第一轮结束后,您将查看最后一轮比赛。在第 2 轮第 1 场比赛中,第 1 场和第 2 场比赛的获胜者参加。第二轮,第2场,第3场和第4场的胜者参加。它应该看起来很熟悉,除了它在第 1 轮之后使用匹配表。我确信有更有效的方法来完成这个重复性任务,我只是没有足够的时间来重构该代码(它被重构了,只是不是那个很多)。
关于php - 比赛支架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2733663/
鉴于我使用 matches!宏观 当我尝试将它与枚举一起使用时 然后它显示出意想不到的行为。 请参阅以下最小示例,playground 中也提供了该示例 pub enum Test { FIR
鉴于我使用 matches!宏观 当我尝试将它与枚举一起使用时 然后它显示出意想不到的行为。 请参阅以下最小示例,playground 中也提供了该示例 pub enum Test { FIR
我使用 pcrecpp c++ (PCRE lib) 我需要循环获取所有匹配项。我该怎么做? 例如模式: “你好” 和主题: “你好你好” 循环应该循环 3 次(因为 3 次匹配) 1 你好 2
循环赛算法在每场比赛只有团队相遇时工作正常。但是,如何在超过两支球队在同一场比赛中相遇的体育比赛或比赛中实现它。例如彩弹射击锦标赛,其中 2 到 n 个团队在 2 到 n 场比赛中相遇。仍然保持尽可能
http://ecoocs.org/contests/ecoo_2007.pdf 我正在为我所在地区即将举行的 ecoo regionals 学习,但我对这个问题感到困惑。我真的不知道从哪里开始。 它
如果有人可以帮助我使用二维数组概念而不是使用集合,那就太好了。因为我必须在这个逻辑中使用数组并获取输出。 问题: 第 1 组有四支球队,名称分别为(“A”、“B”、“C”、“D”)第 2 组有四支球队
我几乎正在尝试重新开始 JAVA 编程,只是需要一些我正在从事的小项目的指导。 差不多,我正在举办一场台球锦标赛,我希望每个玩家都能与每个玩家交手一次: 我创建了该程序( https://sconte
我遇到了这个问题,但无法想出解决方案。有一场 Frog 赛跑, Frog 有一定数量的有效跳步。它可以向前或向后移动。为了赢得比赛, Frog 必须尽可能靠近终点线,但不能越过终点线。 例子。6, 1
Closed. This question needs to be more focused。它当前不接受答案。
我正在为篮球赛季创建一个数据库。在这一点上,我保持简单,并存储表: -联盟 id[PK], name->(NBA, NCAAM, etc) -年 id[PK], league_id[FK], year
我将在当前工作的网站上创建竞赛。每个比赛都不会相同,并且可能有不同数量的输入字段,用户必须输入这些字段才能成为比赛的一部分,例如。 比赛 1 可能只需要一个名字 比赛 2 可能需要名字、姓氏和电子邮件
我正在尝试执行一个查询,该查询可以返回 5 个条件中的大多数匹配的结果。但如果只有 5 场比赛中的 5 场比赛,则优先。 为了说明我的问题,已准备好以下 SQL。 declare @tmp table
我已将所有 Json 转换器放在一个文件 JsonUtil 中,然后有一个 ConvertToJson 方法,该方法尝试转换传递给 json 的任何对象。 基本上是这样的结构: implicit va
我是一名优秀的程序员,十分优秀!