1.实验题目:编号 1,2,....,n 的 n 个人顺时针围坐一圈,每人持有一个密码(正整数)。
开始选择一个正整数作为报数上限 m,从第一个人开始顺时针自 1 报数,报到 m 的人出列,
将他的密码作为新的 m 值,从他在顺时针方向下一个人开始重新从 1 报数,直至所有人全部
出列。
2.基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号。
3.测试数据:n=7,7 个人的密码依次为:3,1,7,2,4,8,4.m 初值为 6(正确的出列顺序
应为 6,1,4,77,2,3)。
该程序基于循环链表来解决约瑟夫问题。用循环链表来模拟 n 个人围坐一圈,用链表
中的每一个结点代表一个人和他所代表的密码。在输入初始密码后 m,对该链表进行遍历,
直到第 m 个结点,令该结点的密码值作为新的密码值,后删除该结点。重复上述过程,直至
所有的结点被释放空间出列。
程序运行后提示用户输入总人数。输入人数 n 后,程序显示提示信息,提示用户输入第
i 个人的密码,在输入达到预定次数后自动跳出该循环。程序显示提示信息,提示用户输入
初始密码,密码须为正整数且不大于总人数。
提示用户输入初始密码,程序执行结束后会输出相应的出列结点的顺序,亦即其编号。
用户输入完毕后,程序自动运行输出运行结果。
测试数据 n=7,7 个人的密码依次为:3,1,7,2,4,8,4。m 初值为 6(正确的出列
顺序应为 6,1,4,7,2,3,5)。
为了实现上述功能,应用循环链表来模拟该过程,用结构体来存放其相应的编号和
评论2
最新资源