gpt4 book ai didi

c# - 锦标赛分组算法(NCAA 等)

转载 作者:可可西里 更新时间:2023-11-01 08:23:34 25 4
gpt4 key购买 nike

我正在尝试在我的程序中实现一个括号(使用 C#/.NET MVC),但我一直在尝试找出一些算法。

例如,我有一个这样的括号,其中包含 8 个条目(A、B、C、D、E、F、G、H)

Bracket Example

我想弄清楚是否有一种算法方法可以

  1. 根据条目数,找出条目数每轮比赛

  2. 根据条目数,对于具体游戏#,是什么下一个对应的游戏#圆?

例如,在这种情况下,对于 8 个条目,示例是:

  1. 第一轮有 4 场比赛。第二轮,2场比赛。第 3 轮,1 场比赛
  2. 第 1 轮的第 2 场比赛对应第 2 轮的第 5 场比赛。

我也考虑过将这些信息存储在一个表中,但它似乎有点过分了,因为它永远不会改变,但无论如何它就在这里:

enter image description here

任何帮助将不胜感激!

干杯,

院长

最佳答案

问题第一部分的 C# 代码:

// N = Initial Team Count
// R = Zero-Based Round #
// Games = (N / (2 ^ R)) / 2
public double GamesPerRound(int totalTeams, int currentRound) {
var result = (totalTeams / Math.Pow(2, currentRound)) / 2;

// Happens if you exceed the maximum possible rounds given number of teams
if (result < 1.0F) throw new InvalidOperationException();

return result;
}

解决第 (2) 部分的下一步是了解给定回合的最小游戏数。一种直观的方法是通过 for 循环,但可能有更好的方法:

var totalTeams = 8;
var selectedRound = 2;
var firstGame = 1;
// If we start with round 1, this doesn't execute and firstGame remains at 1
for (var currentRound = 1; currentRound < selectedRound; currentRound++) {
var gamesPerRound = GamesPerRound(totalTeams, currentRound);
firstGame += gamesPerRound;
}

关于c# - 锦标赛分组算法(NCAA 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com