约瑟夫环C语言求大神纠错,其编号为1,2,…,n(n & gt;0)个人顺时针坐成一圈,每个人拿着一个正整数密码。

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

typedef结构Jonse

{

长码;

struct Jonse * next

} Jonse

jonse * Create(long n);//创建约瑟夫环

Jonse* JonseOut(Jonse*,long,long,long,long);//执行约瑟夫的生死游戏

Jonse* Create(long n) //创建一个循环链表,并给链表的code字段赋值。

{

Jonse *h,* p;

h =(Jonse *)malloc(sizeof(Jonse));

p = h;

for(long I = 1;我& lt= n;i++)

{

p->;code = I;

如果(我& ltn)

{

p->;next =(Jonse *)malloc(sizeof(Jonse));//分配空间

p = p-& gt;接下来;

}

}

p->;next = h;

返回p;//返回指向循环链表结尾的指针。

}

Jonse * Jonse out (Jonse * h,long n,long b,long m,long s)//* h链表末尾总人数B起始位置M死亡人数S剩余人数。

{

琼斯*p,*q,* r;

q = h;

p = h-& gt;接下来;

r = h-& gt;接下来;

long i,flag = 0;//flag记录死亡人数。

Char A[]= "第一个";

Char B[]= "死者的位置是:";

for(I = 1;我& ltb;I++) //让指针指向开始位置。

{

q = p;

p = p-& gt;接下来;

}

while(flag & lt;南北走向)

{

for(长k = 1;k & ltm;K++) // loop使指针指向要删除的节点的位置。

{

q = p;

p = p-& gt;接下来;

}

flag++;

printf("%s%d%s ",A,flag,B);

printf("%d\n ",p-& gt;码);

如果(q->;代码& gtp->;代码& amp& ampp->;代码& lt(p->;下一个)-& gt;Code) //判断要删除的节点是否是第一个节点。

{

r = r-& gt;接下来;

}

q->;next = p-& gt;接下来;//删除死节点

免费(p);

p = NULL

p = q-& gt;接下来;

}

printf(" \ n ");

Printf("最后剩下的人数:");

printf("%d ",s);

printf(" person \ n ");

Printf("剩余活人的位置是:");//输出幸存者的位置

for(long I = 1;我& lt= s;i++)

{

printf("%d\t ",r-& gt;码);

r = r-& gt;接下来;

}

printf(" \ n ");

返回0;

}

int main()

{

长n,b,h,s;

jonse * p;

Printf("请输入生死游戏总人数:");

scanf("%d ",& ampn);//输入生死游戏总数,赋给n。

Printf("请输入游戏开始的地点:");

scanf("%d ",& ampb);//输入游戏的起始位置,赋给b。

Printf("请输入死亡人数:");

scanf("%d ",& amph);//输入死亡号,赋给h。

Printf("请输入剩余幸存者人数:");

scanf("%d ",& amps);//输入幸存者人数,分配给s。

printf(" \ n ");

p = Create(n);//创建循环链表

JonseOut(p,n,b,h,s);//玩一场生死游戏

}