约瑟夫环的故事被改变了很多版本,我的版本是监狱风云:
在一个月高风黑的夜晚,监狱典狱长锤石决定将监狱的33个人处决,但是只留下一个人活下去。他将犯人们围成一个圈,从一号犯人开始,1号报数1,二号报数2,...以此类推,每次报到7的人枪决。 第一次七号犯人死亡,然后8号犯人继续报数1,。。。。以此类推直到最后只剩一个人。而我们有着大智慧的约瑟夫将自己排到了最后活下来的位置,如若想知道位置,则看代码。
include<stdio.h>
#define MAX 33
int main(int argc, const char *argv[])
{
int i,j,k;
int sum=0;//用于计算七人
int p=0;//用于计算存活人数
int a[MAX]={0};
for(i=0;i<MAX;i++)
{
k=i;
if(i==32)
{
i=-1;
}//围成圈
if(a[k]==1)
{
continue;
}//死亡跳过
sum++;
if(sum%7==0)
{
sum = 0;
a[k]=1;
printf("%02d号犯人挂了\n",k+1);
}//计算第七个人 到了7则置0
for(j=0;j<MAX;j++)
{
if(a[j]==0) p++;
}
if(p==1) break;//活着的人为1个 跳出大循环 否则 p=0;重新进行下一轮循环计算
else
p=0;
}
for(i=0;i<MAX;i++)
if(a[i]==0) printf("%d号犯人成功活下!!!!\n",i+1);
return 0;
}
如上代码
将33个犯人视为数组,定义一个int类型含有33个元素的数组。数组里存放犯人的生死状态,生为 0 ,死为1;
如上所示。