问题描述
设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,如此反复直到所有的人全部出列为止。Josephus问题是:对于任意给定的n、s、m,求出按出列次序得到的n个人员的序列。
代码
#include <iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}node;//定义一个结构体node
node* init(int n);
node* move(node* current,int m);
void Jusephus(int n,int s,int m,node *tail);
node *init(int n)//创建循环链表,要求用户输入值
{
node *tail = NULL;
node *p = NULL;
node *s = NULL;
int input = 0;
tail = (node *)malloc(sizeof(node)); // 定义头结点
if(tail == NULL)//如果申请的头结点失败
{
printf("Error: It is failed to get space!");
exit(1);
}
tail->next = NULL;
p = tail;
printf("Enter the data\n");
for(int i = 0