蓝桥杯 约瑟夫环 day11

本博客探讨了经典的约瑟夫环问题,详细介绍了当n个人按顺时针围成一圈,从编号1开始报数,报到k的人退出游戏,直到只剩最后一个人的编号。针对输入n和k,求解最后剩下的编号。通过示例解释了如何通过列表找规律,并提出了新旧环的概念,以解决编号连续性和映射关系。提供了相关算法的PASS代码实现。

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

题目
题目描述
n 个人的编号是 1 ~ n,如果他们依编号按顺时针排成一个圆圈,从编号是 1 的人开始顺时针报数。
(报数是从 1 报起)当报到 kk 的时候,这个人就退出游戏圈。下一个人重新从 1 开始报数。
求最后剩下的人的编号。这就是著名的约瑟夫环问题。
本题目就是已知 n,k的情况下,求最后剩下的人的编号。
输入描述
输入是一行,2 个空格分开的整数 n, k(0 < n,k < 10^7)。
输出描述
要求输出一个整数,表示最后剩下的人的编号。
输入输出样例
示例
输入
10 3
输出
4

总结
可以列表找规律→摘自这个博主
注意,这里的旧环就是进行一轮(踢掉编号为4的人)之后的环,新环是按照上面的方法把剩下的8人进行重新编号(1~8),且让原来编号为5的人现在新的编号为1,原来编号为6的人现在编号为2(依此类推)。
这样新环的编号既解决了旧环编号不连续的问题,又解决了新编号与旧编号之间一一映射的关系,即 ( 旧 的 编 号 ) = [ ( 新 的 编 号 ) + m ] % ( 旧 的 人 数 n )

PASS代码

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值