用数据结构做

来源:百度知道 编辑:UC知道 时间:2024/05/26 06:32:24
约瑟夫问题的实现:设有n个人围坐在圆桌周围,现从某个位置m(1≤m≤n)上的人开始报数,报数到k的人就站出来。下一个人,即原来的第k+1个位置上的人,又从1开始报数,再报数到k的人站出来。依此重复下去,直到只剩一个人为止。试设计一个程序求出出列序列。

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
typedef struct LNode{
int data;
struct LNode *next;
}LNODE;

LNODE *Create(int,int);
LNODE *GetNode(LNODE *);
int Remain(LNODE *,int);

main()
{
LNODE *p;
int n,s,m;
clrscr();
system("cls");
do{
printf("Enter the number of person:\n");
scanf("%d",&n);
}while(n<=0);
do{
printf("Which one to start,please enter its number:\n");
scanf("%d",&s);
}while(s<=0||s>n);
do{
printf("Enter the interval:\n");
scanf("%d",&m);
}while(m<=0||m>=n);
p=Create(n,s);
Remain(p,m);
getch();
return 0;
}

LNODE *Create(int n,int s)
{
LNODE *k,*p,*t=NULL;
int i;
whi