一:问题描述
约瑟夫环问题是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列,他的下一个人又开始报数,数到m的那个人又出列,依次规律重复下去,圆桌周围的人全部出列。
二:算法原理
约瑟夫环运作如下:
1:一群人围坐在一起成环状
2:从某个编号开始报数(如:k)
3:数到某个数(如:m)的时候,此人出列,下一个人重新报数
4:一直循环,直到所有人出列,约瑟夫环出列
三:具体代码实现如下:(保留了最后一个编号)
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node* next;
}LNode,*LinkList;
void Josephus(int n, int m, int k)
{
LinkList p = NULL, x = NULL, list = NULL;
int i;
for(i = 1; i <= n; i++)
{
p = (LNode*)malloc(sizeof(LNode));//向系统申请内存
if (p==NULL) {//确保指针使用前为非空指针,当p为空指针时结束程序
printf("分配失败!");
exit(1);