#include<stdio.h>
#include<stdlib.h>
struct Peo
{
int bian; //记录每个人的编号
int data; //记录是否需要继续报到,也就是有没有咪西掉
};
int main()
{
struct Peo p[41];
int i;
for(i=0;i<41;i++) //首先初始化编号跟数据表示都活着
{
p[i].bian =i+1;
p[i].data =1;
}
int j=0;
int sum=41; //计数,用来判定什么时候退出
for(i=0;i<41;i++) //一直循环直到都咪西掉
{
if(p[i].data ==1) //在数据为1,表示活着的人才有资格报到自杀
{
j++; //报数
if(j==3) //报到3
{
p[i].data =0; //表示咪西掉了
printf("%d\n",p[i].bian ); //输出编号
j=0; //j为零进行下一组报数
sum--; //活着的人数减一
}
}
if(i==40) //当到达链表尾部的时候
{
if(sum==0) //如果都死了,退出循环
break;
else //如果还有人没死,令i=-1,返回链表头部,-1是因为循环回去会加一,也就是i=0
i=-1;
}
}
return 0;
}
约瑟夫:41一个人,依次报到,报到三自杀,依次输出自杀人的编号
于 2022-01-20 15:39:41 首次发布