/*题目描述:
N个人排成一队, 从1到5轮流报数, 报5的人是幸运者, 出列。报到队尾后, 从队首接着报,依次循环
问: 排在队尾的人是第几名幸运者
注: N为小于100000的正整数
例:
1人排成一队, 他就是第一名幸运者。
3人排成一队, 他就是第2名幸运者。
5人排成一队, 他就是第1名幸运者。
8人排成一队, 他就是第3名幸运者。
即求:N人排成一队, 队尾是第多少名幸运者
*/
function LuckySeqNum(N=1) {
var arr = new Array(N),tailLuckySeq = 0;
var num = 0,flag = true;
for(let i=0;i<N;i++) arr[i]=0 // 初始化数组
var i = 0;
while(flag) {
if(i===arr.length) i=0;
for(;i<arr.length;i++) {
if(arr[i]===1) continue; // 关键: 若当前元素的值为1, 表示已经是幸运者, 不能再参与报数,应跳过
num++;
if( i<N-1 && num===5 && arr[N-1]===0) {
arr[i]=1;
tailLuckySeq++;
num = 0;
}
if( i===N-1 && num===5 ) {
arr[i] = 1;
tailLuckySeq++;
return tailLuckySeq
}
}
}
}
console.log(LuckySeqNum(3))
1082

被折叠的 条评论
为什么被折叠?



