// 猴子选大王
// -
// 要求一群猴子排成一圈, 按“ 1, 2, ……, n” 依次编号。 然后从第1只开始数, 数到第m只, 把它踢出圈, 其后的猴子再从1开始数, 数到第m只, 再把它踢出去……, 如此不停的进行下去, 直到最后只剩下一只猴子为止, 那只猴子就是我们要找的大王。 -
// 假设n( 猴子总数): 8、 m( 踢出圈的): 3 -
// 第一圈: 踢出的猴子编号为3、 6, 位置编号为3、 6。 -
// 第二圈: 踢出的猴子编号为1、 5, 位置编号为9、 12。 -
// 第三圈: 踢出的猴子编号为2、 8, 位置编号为15、 18。 -
// 第四圈: 无。 -
// 第五圈: 踢出的猴子编号为4, 位置编号为21。 -
// 得出猴王编号: 7。
// -
// 通过prompt() 接收用户传递的猴子总数n和踢出的第m只猴子。
// -
// 利用数组保存所有猴子的编号( 1~n)。
// -
// 设置一个变量i, 记录每次参与游戏( 报数) 的猴子位置。
// -
// 通过while循环, 只要猴子数组内元素个数大于1, 就继续循环。
// -
// 在循环中判断当前猴子的位置i与m求余是否为0, 若为零, 删除该数组元素。
// 1, 2, 3, 4, 5, 6, 7, 8
/* 2, 3, 4, 5, 6, 7, 8, 1
3, 4, 5, 6, 7, 8, 2, 1
4, 5, 6, 7, 8, 2, 1 */
var monkey_sum = prompt('猴子的总数:'),
monkey_loc = prompt('踢出猴子的位置:'),
monkey_arr = [];
// 用数组保存猴子的编号
for (let i = 0; i < monkey_sum; i++) {
monkey_arr.push(i + 1);
}
let monkey_num = 0;
// 若数组内长度大于1, 就一直循环
while (monkey_arr.length > 1) {
monkey_num++;
// shift() 方法移除数组的第一项
let monkey_head = monkey_arr.shift();
// 判断当前猴子的位置i与m求余是否为0, 若为零, 删除该数组元素
if (monkey_num % m != 0) {
// 将移除的第一项添加到数组的后面
monkey_arr.push(monkey_head);
}
}
alert('猴王的编号为:' + monkey_arr[0]);
猴子选大王,要求一群猴子排成一圈, 按“ 1, 2, ……, n” 依次编号。 然后从第1只开始数, 数到第m只, 把它踢出圈, 其后的猴子再从1开始数, 数到第m只, 再把它踢出去……, 如此不停的
最新推荐文章于 2022-10-01 14:48:21 发布