一位数组>>>>>>>>>>约瑟夫环

来源:互联网 发布:矢仓枫子 知乎 编辑:程序博客网 时间:2024/05/19 17:59

约瑟夫环的故事被改变了很多版本,我的版本是监狱风云:

在一个月高风黑的夜晚,监狱典狱长锤石决定将监狱的33个人处决,但是只留下一个人活下去。他将犯人们围成一个圈,从一号犯人开始,1号报数1,二号报数2,...以此类推,每次报到7的人枪决。 第一次七号犯人死亡,然后8号犯人继续报数1,。。。。以此类推直到最后只剩一个人。而我们有着大智慧的约瑟夫将自己排到了最后活下来的位置,如若想知道位置,则看代码。

include<stdio.h>#define MAX 33int 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则置0for(j=0;j<MAX;j++){if(a[j]==0) p++;}if(p==1) break;//活着的人为1个  跳出大循环 否则 p=0;重新进行下一轮循环计算elsep=0;}for(i=0;i<MAX;i++)if(a[i]==0) printf("%d号犯人成功活下!!!!\n",i+1);return 0;}

如上代码  


将33个犯人视为数组,定义一个int类型含有33个元素的数组。数组里存放犯人的生死状态,生为 0   ,死为1;

如上所示。

原创粉丝点击