約瑟夫問題是典型的佇列問題:
首先我們讓所有的小朋友進隊,然後對他們邊出隊,邊判斷是否還回來。
弄出去,再弄進來就是模擬佇列從隊首到隊尾的過程
充分利用佇列先進先出的特點。
注意:佇列中while的條件:q.
size()
>
1而不是 while
(!q.
empty()
).因為最後要留乙個,此條件可能
會把最後乙個小朋友也淘汰出隊。
# include
# include
using
namespace std;
intmain()
int now =0;
while
(q.size()
>1)
else
} cout << q.
front()
<
return0;
}
機試真題 小朋友報數問題 約瑟夫環
沒啥難度,還是難以判斷測試用例的問題,也就是k是否大於10,否則就會採用字串進行判斷 include include include includeusing namespace std int n,k struct node queueque vectorvec bool charge int m...
報數問題(約瑟夫環)
解法一 用陣列模擬 include using namespace std intmain sign 實際標號的 if sign 0 sign n 1 if i n 1 cout loop sign 0 return0 解法二 從位置考慮,舉例說 nnum 5 move 212 3453 4515 ...
約瑟夫問題(1,2,1,2報數)
題目描述 n個人排成一圈,按順時針方向依次編號1,2,3 n。從編號為1的人開始順時針 一二 報數,報到2的人退出圈子。這樣不斷迴圈下去,圈子裡的人將不斷減少。最終一定會剩下乙個人。試問最後剩下的人的編號。n很大,直接模擬題意不行,請找出規律。輸入不超過1000組資料。每組資料一行,每行乙個正整數,...