香菜凤仁鸡,你干嘛 2023-07-13 22:31
浏览 16
已结题

约瑟夫环变式问题的加深

题目描述
西元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条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 7月13日
    • 修改了问题 7月13日
    • 修改了问题 7月13日
    • 修改了问题 7月13日
    • 展开全部

    悬赏问题

    • ¥15 github上的这个C语言项目如何跑起来
    • ¥15 java 判断某个数 区间是否存在
    • ¥15 appium控制多个雷电模拟器问题
    • ¥15 C# iMobileDevice
    • ¥15 谁会做这个啊#ensp#Boson NetSim
    • ¥15 如何编写针对TPS6503320FRGE型号的电源管理芯片的编程代码?
    • ¥15 设计简单目录管理系统,要满足以下内容
    • ¥15 关于九十度混合耦合器信号分析问题
    • ¥15 Cesm如何关闭不用的模块呢
    • ¥15 vue2两层数据导出为excle