#include<stdio.h>
#include<malloc.h>
#define OK 1
#define FALSE -1
#define TURE 1
#define ERROR -1
#define INFEASIBLE -1
typedef int Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
}LNode, *LinkList;
LinkList p, r, last=NULL;
int i;
void CreatList(int n)
{
for(i=1;i<= n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(last==NULL)
last=p;
else
r->next=p;
r=p;
}
p->next=last;
p=last;
}
void StartNum(int s)
{
for(i=1;i<s;i++)
{
r=p;
p=p->next;
}
}
void DeleteList(int m)
{
while(p->next !=p)
{
for (i=1;i<m;i++)
{
r=p;
p=p->next;
}
r->next=p->next;
printf("Number %d is out\n",p->data);
free(p);
p=r->next;
}
printf("Number %d is save\n",p->data);
}
void DeleteNum(int m,int save,int n)
{
while(p->next!=p)
{
for(i=1;i<m;i++)
{
r=p;
p=p->next;
}
r->next=p->next;
printf("Number %d is out\n",p->data);
free(p);
p=r->next;
n--;
if(n==save)break;
}
while(p->next!=NULL){
printf("Number %d is save\n",p->data);
p=p->next;
save--;
if(save==0)break;
}
}
int f(int n,int m)
{
return n == 1?n:(f(n-1,m)+m-1)%n+1;
}
int main()
{
int n,m,s,save=1;
printf("请输入总人数n:\n");
scanf_s("%d",&n);
printf("请输入间隔m:\n");
scanf_s("%d",&m);
printf("请输入开始的位置s:\n");
scanf_s("%d",&s);
printf("请输入要保留的人数s:\n");
scanf_s("%d",&save);
CreatList(n);
StartNum(s);
printf("****** Solve Josephus Problem******\n");
DeleteNum(m,save,n);
printf("****************END****************\n");
system("pause");
return 0;
}
运行正常吗?运行正常的话还OK啦
程序的目的是什么? 请讲清楚。