#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct Josephus)
struct Josephus
{
int num;
struct Josephus *next;
};
void main()
{
printf("约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在");
printf("一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开");
printf("始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。");
printf("\n");
int m,n,k;
int i;
printf("Please input the values of m,n,k.");
scanf("%d,%d,%d",&m,&n,&k);
struct Josephus *p0,*p,*head;
head=NULL;
for(i=0;i<n;i++)
{
p=(struct Josephus*)malloc(LEN);
p->num=i;
if(head==NULL)
{
head=p;
p0=p;
}
else
{
p0->next=p;
p0=p;
}
}
p->next=head;
p=head;
for(i=0;i<k;i++)
{
p0=p;
p=p->next;
}
while(p->next!=p)
{
for(i=0;i<m-1;i++)
{
p0=p;
p=p->next;
}
p0->next=p->next;
printf("被删除的元素:%4d ",p->num);
p=p0->next;
}
printf("\n最后被删除的元素是:%4d",p->num);
}
约瑟夫环问题
最新推荐文章于 2022-05-04 19:46:17 发布