1688. 比赛中的配对次数
给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:
如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。 如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。 返回在比赛中进行的配对次数,直到决出获胜队伍为止。
思路
我总觉的是有些规律的,但是抓不到,所以我还是先把最简单的方法先写下来,打印一下每次的输出效果,在进行一次比对就好
代码1
var numberOfMatches = function(n) {
let count = 0
while(n > 1) {
// 如果是偶数
if(n % 2 === 0){
count = count + n / 2
n = n / 2
} else {
count = count + (n-1) / 2
n = (n-1) / 2 + 1
}
}
return count
};
这里好像就结束了,是不是,平平无奇,但是 提示:
1 <= n <= 200诶,这里我有点想要找一下规律了
for(let i = 1; i < 200; i++) {
console.log(`${i}:`,numberOfMatches(i))
}
??? 这个规律 我有一个大胆的想法!
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/co…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。