报数游戏

100个人围成一圈,每个人有一个编码,编号从1开始到100。

他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数

,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?

例如输入M=3时,

输出为:

“58,91” ,

输入M=4时,

输出为:

“34,45,97”。

let arr = []
let M = 3
let num = 0
for(let i = 0;i<100;i++){
    arr.push(i+1)
}
for(let i = 1;i<=arr.length;i++){
    if(i===M){
        num= num + (i-1)
        if(num>=arr.length){
            num = num - arr.length
        }
        arr.splice(num,1)
        i = 1
    }
}
console.log(arr.join(','));

下面是之前写的,在OJ上超时了,大概是80%用例这样。上面是优化后的

let arr = []
let M = 4
for(let i=0;i<100;i++){
    arr.push({
        index:i+1
    })
}
while (arr.length>=M){
    test(M)
}
arr.sort((a,b)=>a.index-b.index)
for(let i of arr){
    console.log(i.index);
}
function test(M){
    for(let i=0;i<arr.length;i++){
        if(i+1===M){
            let beforeArr = arr.splice(0,i+1)
            arr = arr.concat(beforeArr)
            arr.pop()
            break
        }
    }
}
机试题 文章被收录于专栏

某机试题,网上很少用js写的答案只有自己写了

全部评论

相关推荐

07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 14:06
点赞 评论 收藏
分享
难怪不开摄像头,全是简单的性格题,比大疆友善多了
NULL10086:今早上发的测评,我这还没做呢,官网上已经显示挂了
投递大疆等公司7个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务