【JavaScript】7-28 猴子选大王 (20分)
题目:
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:
输入在一行中给一个正整数N(≤1000)。
输出格式:
在一行中输出当选猴王的编号。
输入样例:
| 11 |
输出样例:
| 7 |
思路:数学方法解约瑟夫环问题
JavaScript代码:
const { parse } = require('path')
var readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', function(line) {
var N = parseInt(line)
var ret = getKing(N)
console.log(ret)
})
function getKing(N) {
var flag = []
for (let i = 0; i < N; i++) {
flag[i] = false
}
var i = 0
var count = 0
var total = 0
while (true) {
if (flag[i] == false) {
count++
if (count == 3) {
flag[i] = true
count = 0
total++
if (total == N - 1 || N == 1) {
break
}
}
}
i = (i + 1) % N
}
var ret = 0
for (let i = 0; i < flag.length; i++) {
if (flag[i] == false) {
ret = i
break
}
}
return ret + 1
}

浙公网安备 33010602011771号