我作為乙個初學者,認為約瑟夫環問題最難解決的問題,可能是將直線的資料變成環型迴圈。
在網上看到很多關於這個問題的解法,但我覺得不是自己的思路,就自己根據網上查詢的內容進行了乙個整合。
(看了csdn和知乎的大神的思路的整合)
我是這樣考慮問題的。
從頭到尾的一圈人,如何判斷誰出去,誰不出去?
可以設乙個標記來判斷,這個標記你可以給他設0或1這樣簡單的數字作為篩選,將陣列元素全部初始化為0,出去的人記作1。
到達陣列最後乙個格仔的時候,立刻把n賦值為-1,這樣就能圍成乙個圈了。
出去的人不會被累加器識別,輸出陣列下標+1(陣列是從0開始),for迴圈到最後,出列人數為所有人,且所有人標記為1,迴圈結束。順序輸出到螢幕上。
**如下。
#include"stdio.h"
int main()
; //_outpeople為出列人數,sum為計數器,給初始陣列全部元素賦值為0
scanf("%d %d",&n,&i); //n為你所選擇開始的人,而i是數到第幾個人出列
for(n;_outpeople<10;n++)
if(sum==i)//判斷計數器是否達到i值,如果是,標記為1,出列人數+1,輸出陣列下標。
if(n==9)
}return 0;
}
約瑟夫環(陣列實現)
有 m 個人,每次數 n 個殺死,問從第幾個開始數可以保證第乙個人活到最後。include define ll long long define inf 0x3f3f3f3f define endl n using namespace std const int n 1e6 100 int a n ...
C語言 實現約瑟夫環
鏈式解法 include include typedef struct sqlist sqlist 建立解約瑟夫環需要的鍊錶,該鍊錶不帶頭節點 sqlist creatlist int length p next null 普通鍊錶轉不帶頭結點的迴圈鍊錶,就是將頭指標下移到第乙個節點位置 原來的頭結...
C語言實現約瑟夫環
直接上 define crt secure no warnings include includetypedef struct listnode listnode void create listnode firstnode,int m 建立單向迴圈鍊錶 int i listnode pre fir...