约瑟夫问题。有n个人,编号为1,2,…,n,围成一个圆圈,按照顺时针方向从编号为k的人从1开始报数,报数为m的人出列,他的下一个人重新开始从1报数,数到m的人出列,一直这样重复下去,直到所有的人都出列。要求编写一个算法,输入n、k和m,依次输出每次出列人的编号。例如,输入9、3、5,则输出结果为7、3、9、6、5、8、2、4、1.要求编写完成程序实现,并粘贴源代码,上传运行结果截图。
举一反三
- 有n个人围成一圈,按序列编号。从第1个人开始报数,数到m时该人退出,并且下一个从1重新开始报数,求出出圈人的顺序(n>m,例如n=20,m=7)。请编写一个通用程序。
- 有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子,下一个人从1开始报数,报到的人退出圈子。如此下去,直到留下最后一个人。编写程序,输入整数n和m,并按退出顺序输出退出圈子的人的编号。
- 一个旅行社要从n个旅客(编号1~n)中选出一名旅客,为他提供免费的环球旅行服务。旅行社安排这些旅客按编号顺序顺时针围成一个圆圈,从帽子中取出一张纸条,用上面写的正整数m([n)作为报数值。游戏进行时,从第s个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人被淘汰出列,然后从他顺时针方向上的下一个人开始重新报数,如此下去,直到圆圈中只剩下一个人,这个最后的幸存者就是游戏的胜利者,将得到免费旅行的奖励。其中数据结构采用单循环链表。<br] [br][/br] 输入参数:n=20、m=5、s=3 输出最后游戏胜利者的编号:
- 题目详见实验指导书178页。设有编号为1-n(n>;0)的若干个人围成一个圈,从第一个人开始报数,报到m的人出圈,下一个人从1重新报数,如此循环,在输入n和m的情况下,输出出圈序列。要求:提交运行截图和实验报告。
- 有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数。如此进行下去直到所有的人都出圈为止。求n个人出圈的顺序。要求:人数和出圈号码通过用户输入得到。