偶然看到技术群里 发出这么一个问题
n 个人围成一圈, 从1到3开始报数, 报到 3 的人 退出游戏. 问,最后一个留下来的人是 最开始的 谁?
觉得挺有意思的, 就自己写了一段:
/**
* @param {Object} n 围成圈的人数
* @param {Object} m 报数最大值
*
* n 个人围成一圈, 从1到m开始报数, 报到 m 的人 退出游戏. 问,最后一个留下来的人是 最开始的 谁?
*/
function getPeople(n,m) {
var group = [];// 定义数组
for (var i = 0; i < n; i++) {
group[i] = i + 1;//数组赋值 从1 开始
}
var number = 1; // 定义 报的 数
var groupLen = group.length; // 总人数
for (var i = 0; i < i+1; i++) { // 死循环, 知道游戏结束
if (number == m) { // 喊到 m 的人
group.splice(i, 1); // 退出游戏
number = 0; // 接着开始报数
groupLen--; // 总人数 -1
i--; // 退出一个人后, i 也需要 --
}
if (groupLen == i + 1) { // 当 总人数, 和 循环的 i 相同时, 开始新一轮 报数
i = -1; // 定义为 -1 , for 循环定义的 i++ 会让值变成0
}
if(group.length == 1){// 当 只剩下一个人时, 退出游戏
break;
}
number++;
}
console.log("获胜者是:" + group[0])
}
利用 死循环 以及 达到最大值后, 初始化 i 的方法.很容易就可以解答这个问题.