【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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM