一、实验原理
约瑟夫问题描述:编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数直到报m的人,将此人删除,并将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从一报数,……,如此下去,直到所有人全部出列为止。 实现:利用单向循环链表存储结构模拟约瑟夫环,按照出列的顺序打印出各人的编号和此人对应的密码。
二、参考程序
#include <stdio.h>
#include <stdlib.h>
/*--------------------------结构体------------*/
typedef struct Lnode /* 结点的结构定义 */
{ int num; /* 编号子域 */
int sm; /* 密码子域