在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码
在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码
一、问题描述
在控制台下实现约瑟夫环.
编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值 m,从第一个人开始按顺时针方向自1开始报数,报到 m时停止报数.报m的人出列,将他的密码作为新的 m 值,从他在顺时针方向上的下一个人开始重新报数,如此下去,直至所有人全部出列为止.试设计一个程序求出出列顺序.
二、基本要求
(1)m 的初值由用户输入,n值可以由用户输入也可从读入的文件中统计.
(2)每个人应至少包含的信息:姓名、编号、密码.
(3)参照线性表的实现完成此程序.
(4)打印”约瑟夫环“的初始顺序信息,含有编号、姓名、密码.
(4)用户可选择按姓名或按编号打印出列顺序.
(6)本题提交整个程序的实现代码.
四、测试数据
(1) m = 57,n = 19
(2) m = 65 ,n = 16
(3) m = 32 ,n = 20
(4) m = 101, n = 55
(5) m = 1001 ,n = 28
五、实现提示
(1) 可参照已经实现的的“动态顺序表”或“动态单链表“选择一个适当的存储结构模拟此过程;
(2) 参加“约瑟夫环”游戏的每一项为一个结点,数据类型ElemType为结构体,包含三个数据成员:姓名、编号和密码;
(3) 出列时考虑对第一项和最后一项的作特殊处理.
#includeusing namespace std;#define TRUE 1#define FALSE 0#define OK 1typedef int Status;typedef double ElemType;//-----------------------------------//定义单向循环链表typedef struct LNode{ int number;...