综合性实验(满分 100)
约瑟夫环问题
(1)问题描述 设有编号为 1,2,…,n 的 n(n>0)个人围成一个圈,每个人持有一个密码 m。 从第一个人开始报数,报到 m 时停止报数,报 m 的人出圈,再从他的下一个人 起重新报数,报到 m 时停止报数,报 m 的出圈,……,如此下去,直到所有人 全部出圈为止。当任意给定 n 和 m 后,设计算法求 n 个人出圈的次序。
(2)基本要求
建立模型,确定存储结构。
对任意 n 个人,密码为 m,实现约瑟夫环问题。
出圈的顺序可以依次输出,也可以用一个数组存储。
(3)思考:
采用顺序存储结构如何实现约瑟夫环问题?
如果每个人持有的密码不同,应如何实现约瑟夫环问题?
因为思考(2)太晦涩难懂,我只是写了我自己的理解。不一定是对的。
#include <iostream>
#include <algorithm>
#include <malloc.h>
using namespace std;
const int N=1e6+10;
int n,m,cnt=0;
struct linklist
{
int idx;
int pass;
linklist *pre,*nxt;
}*head,*tail;
void creat()//建立一个