題目:
一群猴子要選新猴王。新猴王的選擇方法是:讓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 }