#include <stdio.h>
int main()
{
int i,j=0,t,n,p;//i是数组下标
printf("有多少个人:");
scanf("%d",&n);
printf("最大的报数是几:");
scanf("%d",&p);
int a[n];//记录每个人的状态(1是活着,0是嗝屁了)
for(i=0;i<n;i++) a[i]=1;//全部赋值1
for(i=0,t=0;;i++)
{
if(a[i]) {j++;t++;}//j是记录有多少人报数,t是记录还有多少人活着
if(j%p==0) a[i]=0;//报数是p的人会被枪毙,所以状态变为0
if(i==n-1) //因为i是下标,所以当i=n-1的时候进入
{
if(t==1) break;//若只有一个人活着,就跳出循环
i=-1;//因为循环后有i++
t=0; //t是还有多少人活着,所以要归零
}
}
printf("只有这个幸运儿活了下来:\n");
for(i=0;i<n;i++)//找出活下来的人
if(a[i]) printf("%d号",i+1);
}
约瑟夫环(C语言)
于 2024-02-25 11:31:41 首次发布