N个人排一排,从1到N编号。然后从第一个人开始报数,若报数是M的倍数则出列,并将该人存入一个数组中,剩下的人继续报数,同样规则,得到最后的出列顺序的人的编号 JS
function solution(n, m) {
//对N个人先编号
let arr = [];
for (let i = 1; i <= n; i++) {
arr.push(i);
}
//存放出列人的编号
let res = [];
let num = 0;
while (arr.length >= 1) {
let len = arr.length
let outNum = 0;
for (let j = 0; j < len; j++) {
num++;
if (num == m) {//当数到m个数的时候,num重新开始计数
num = 0;
res.push(arr[j - outNum]);
arr.splice(j - outNum, 1)
outNum++;//1 2 1 1 1 1
}
}
}
return res.join(' ')
}
console.log(solution(6, 3)); //3 6 4 2 5 1