我正在寻找一种方法来判断两支球队将在标准运动支架中遇到的 ROUND 和 MATCH (轮位)。
假设有16支队伍按数字顺序排列。 我想快速输入两个团队编号并得到答案。
以下是团队会面时的一些例子:
第1队与第16队(只能在决赛中见面)
第4轮 - 比赛1
第11队与第15队(将在半决赛中相遇)
ROUND 3 - MATCH 2
第3队与第4队(将在第一轮见面)
ROUND 1 - MATCH 2
我确信我可以通过循环来做到这一点,但我已经感觉到它将成为一个基于数学的解决方案,这将更清洁,更高效。
答案 0 :(得分:1)
不能用任何单一的数学公式完成(AFAIK)。
如果你把球队的数据从0而不是1开始,那么两支球队只能在决赛中遇到他们球队号码的第3个二进制位不同:
public interface IBusinessRule
{
bool IsDivisible(int inputValue);
string PrintOutput();
}
如果有机会他们可能会在半决赛中相遇,那么只有当他们的球队号码的第二个二进制位不同时,才会发生这种情况,和他们并非如此。在之前的测试中发现:
if ((teamA ^ teamB) & 8 != 0) {
// meet in final
round = 4;
match = 1;
}
&安培;等......
一个简单的循环实际上可以做得很好:
else if ((teamA ^ teamB) & 4 != 0) {
// meet in semi-final
round = 3;
match = Math.floor(teamA / 8) + 1;
}