实习报告
题目:约瑟夫环
班级:
031014
姓名:刘嵩
学号:
03101409
完成日期:
2011.11.16
一、需求分析
1.
本演示程序中,要求用户输入人数
n
和初始报数上限的值
m
。并依次输入
n
个人
的密码(
password
)
。程序输出
n
个人的出列顺序。
2.
演示程序以用户和计算机的对话方式执行,
即在计算机终端上显示
“提示信息”
之
后,
由用户在键盘上输入演示程序中规定的运算命令;
相应的输入数据和越算结
果显示在其后。
3.
程序执行的命令包括
1
)构造链表
2
)依照题意对链表进行操作,每次删除一个链表的节点并将删
除节点的编号输出
3
)结束
4.
测试数据
Sample input
7
20
3 1 7 2 4 8 4
Sample output
6 1 4 7 2 3 5
二、概要设计(算法描述)
为实现上述程序功能,
应以循环列表表示
n
个人围坐一圈。
循环列表每个节点所要包含
的信息包括:
1.
每个人的编号
2.
每个人的密码
3.
指向下一个节点的指针。建好链表后,
从链表的首个节点开始,顺着链表向后移
m
次,得到一个节点
Node
。输出
Node
的编号,
并将
Node
从链表中删除,然后讲
Node
的密码值作为新的
m
。重复以上步骤,直到所有节
点均被从链表中删除为止。算法复杂度为
O(m*n)
。
三、详细设计
代码如下
:
#include
using namespace std;
struct node
{
int id;
int password;
node* next;
};
int main()
{
i
nt m,n;
c
out<
c
in>>n;
c
out<