js 约瑟夫 问题 解.

本文探讨了n个人围成一圈进行报数游戏的问题,通过编写JavaScript代码解决了约瑟夫环问题,找到最后留下的那个人的起始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶然看到技术群里 发出这么一个问题

 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 的方法.很容易就可以解答这个问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值