课程设计与内容要求 约瑟夫环问题 [问题描述] 编号是1,2,……,n 的n 个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数)
一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1 开始顺序报数,报到m 时停止报数
报m 的人出列,将他的密码作为新的m 值,从他在顺时针方向的下一个人开始重新从1 报数,如此下去,直到所有人全部出列为止
设计一个程序来求出出列顺序
[基本要求] 利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号
此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限
[测试数据] m 的初值为20,n=7 ,7 个人的密码依次为3,1,7,2,4,7,4,首先 m=则正确的输出是什么
[要求]: 输入数据:首先输入待处理人员数及他们的密码,然后输入 m 的初值,建立单循环链表
输出形式:建立一个输出函数,将正确的出列序列输出
一问题描述与分析 约瑟夫问题 编号是1,2,……,n 的n 个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数)
一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1 开始顺序报数,报到m 时停止报数
报m 的人出列,将他的密码作为新的m 值,从他在顺时针方向的下一个人开始重新从1 报数,如此下去,直到所有人全部出列为止
设计一个程序来求出出列顺序
分析 利用单循环链表解决本问题,先创建一个有n 个的单循环链表,依次录入密码
然后从第一个结点出发,连续略过 m-1 个结点,将第m 个结点从链表中删除,并将第m 个结点的密码作为新的 么 值,接着从下个结点开始,循环此过程,直至链表为空
二数据结构描述 利用不带头结点的单循环链表来作为约瑟夫环的存储结构 三主要算法 流 程描述 1 主要流程图 定义数据类型 ↓ 创建单循环链表 ↓ 删除结点并输出结点 2 具体程序