一位陣列>>>>>>>>>>約瑟夫環
阿新 • • 發佈:2019-02-05
約瑟夫環的故事被改變了很多版本,我的版本是監獄風雲:
在一個月高風黑的夜晚,監獄典獄長錘石決定將監獄的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;
如上所示。