(八十一)約瑟夫環 魯智深吃饅頭

2021-07-08 16:05:02 字數 1102 閱讀 9398

問題:99個人,99個饅頭,來了乙個魯智深,找個位置把他放進去,然後每逢五的人,吃乙個饅頭,並且退場,最後讓他無法吃。

**:

#includeint main()

int m = 0; //引數m,用於記錄出局者

int i = 1; //引數i,當i為5時,當事人被賦值為0,即出局,且a++,i=0

int x = 0; //引數x,用於記錄當前人士座標,x大於99,則x-100

for (;m < 99;)

if (x > 99)x = x - 100;

} while (a[x] == 0)

a[x] = 0;

if (i = 5)

if (x > 99)x = x - 100;

} m++;

} for (i = 0;i < 99;i++) }

system("pause");

return 0;

}

輸出:

第47個位置,吃不到饅頭

請按任意鍵繼續. . .

**解釋:

①第乙個部分是賦值,在場的人賦值1,然後給退場的人賦值0。

②最後一部分是檢測誰的值是1,則誰還在場——吃不到饅頭。

③m是退場標記,每退場乙個,m+1,m到99的時候,說明就剩乙個人了。

④i是計數標記,每當i=5的時候,退場乙個人,然後i歸1,且位置移動一位。每過乙個人,i+1;

⑤每次i+1的時候(即位置移動一位的時候),測試一次當前位置有沒有人(用值是否為0測試),沒有人則i不變,然後當前位置繼續加1。

⑥可以理解為100個人站成乙個圓,

每次移動位置(i+1)的時候,要檢測當前位置有沒有人,

若有人,則x隨之加1;若當前位置無人,則檢測下乙個位置,一直檢測到有人為止,有人後x加一;

若繞完一圈(即x>99),則剛好抵達初始位置(即x-100,從開始起第101個位置的人,和初始位置的人是乙個位置),這是x-100的原因。

每次移動5個位置,即逢5的人吃饅頭,於是該人退場(值歸0)。

等退場99個人後,乙個乙個位置檢測過去,檢測到有人值不是0,於是這個人就是吃不到饅頭的人。

八十一條經典名言

title 1.每天告訴自己一次,我真的很不錯 2.生氣是拿別人做錯的事來懲罰自己 3.生活中若沒有朋友,就像生活中沒有陽光一樣 4.明天的希望,讓我們忘了今天的痛苦 5.生活若剝去了理想 夢想 幻想,那生命便只是一堆空架子 6.發光並非太陽的專利,你也可以發光 7.愚者用肉體監視心靈,智者用心靈監...

八十一題題目合集 微軟面試100題 第八十一題

題目要求 問題1 在乙個int陣列裡查詢這樣的數,它大於等於左側所有數,小於等於右側所有數。問題2 乙個檔案,內含一千萬行字串,每個字串在1k以內,要求找出所有相反的串對,如abc和cba。問題3 stl的set用什麼實現的?為什麼不用hash?題目分析 問題1分析 假設int陣列為data。用兩個...

C 學習(八十一)deprecated宣告

c 屬性 deprecated c 14 起 指示宣告有此屬性的名字或實體被棄用,即允許但因故不鼓勵使用。語法 deprecated 1 deprecated 字元字面量 2 字元字面量 能用於解釋棄用的理由並 或提議代替用實體的文字 解釋指示允許使用宣告有此屬性的名稱或實體,但因故不鼓勵使用。編譯...