题目描述
西元67年,在罗马和犹太人的冲突中,史学家 Josephus 和其他40个人被关在一个洞穴中。罗马人知道 Josephus 的下落后希望他能投效罗马帝国。但是他的同伴们却不允许他投降。所以Josephus 建议他们彼此杀害,一个接一个,被杀的顺序就由命运决定。传统上他们决定命运的方式为:大家围成一个圆圈,从某个人开始算起,每算到 3 个人那个人就被杀掉,如此不断下去,直到只剩一个人。后来 Josephus 成为唯一的存活者并投降罗马。我们有兴趣的是:Josephus 如何刚好是那个存活者?真的是运气好,还是他事先在暗地里用 41 颗石头练习过,或者他有一个数学的方法可以知道要站在哪一个位置才能成为最后的存活者? 听过这个故事后,你相当的忧心要是将来某一天你也面临同样的情况要怎么办。所以你决定用你的手上型电脑写一个程式算出应该从那个人开始算起,你才可以成为那个最后唯一存活的人。 在这个问题中,你的程式必须能解决 Josephus 描述的另一种变形。有 n 个人排成一个圆圈,面向内,依顺时钟方向编号从 1 到 n。你的位置在 1 。杀人程序由编号 i 的人开始算起(顺时钟方向),直到算到第 k 个人,那个人立刻被杀掉。然后从这个被杀的人左边的那个人再顺时钟方向算 k 个人,那个人必须负责埋葬刚才被杀的那个人,然后回去站在刚才被杀的那个人的位置。接下来从这个人的左边那个人算起,第 k 个人又被杀掉,如此一直下去直到只剩下一个人为止。 例如:当 n=5, k=2, i=1, 那么被杀的顺序为 2, 5, 3, 1,存活者为4。
输入
输入含有多组测试数据。 每组测试资料有2个数据n, k 。你可以假设最多只有 100 个人。 若 n = k = 0 时代表输入结束。对每组测试书输出一开始时应该从哪一个人算起(也就是 i),才能确保你是最后唯一的存活者。请记住:你的位置在 1。以上述的例子来看,必须由第 3 个人算起,最后存活的人才能是1 。
怎么理解这个问题,给个思路理解
约瑟夫环变式问题的加深
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
0条回答 默认 最新
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境