51nod 1073 約瑟夫環

2021-08-17 08:30:35 字數 988 閱讀 5508

1073 約瑟夫環

基準時間限制:1 秒 空間限制:131072 kb 分值: 0 難度:基礎題

n個人坐成乙個圓環(編號為1 - n),從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。

例如:n = 3,k = 2。2號先出列,然後是1號,最後剩下的是3號。

input

2個數n和k,表示n個人,數到k出列。(2 <= n, k <= 10^6)
output

最後剩下的人的編號
input示例

3 2
output示例

3
思路: 約瑟夫環的數學推導公式 f(n)=(f(n-1)+m)%n      編號從0->n-1

大佬部落格:

大致講一下對映, 對於 n=7,數到m=3出列。

0 1 2 3 4 5 6 第一次 2出列 變為

0 1 3 4 5 6  又從3開始,可對映為

4 5 0 1 2 3  此時可看成 n=6,m=3,從第三個開始編號0, 

若已求出 答案 f(6)=1,對映到n=7即 f(7)=4;

因為 f(6)的狀態是由 f(7)轉換而來,那麼f(7)=(f(6)+m)%7;

這是由於 n=7 

0 1 2 3 4 5 6 第一次 2出列後 又從3開始重新編號及

4 5 x 0 1 2 3   0前面有m個數,因此 4對映到1為 4= (1+m)%7; 即 f(7)=(f(6)+m)%7;

因此可推出 f(n)=(f(n-1)+m)%n;

而題目編號由 1開始,因此 ans=f(n)+1;

code:

#includeusing namespace std;

int main()

return 0

}

51Nod 1073 約瑟夫環

1073 約瑟夫環 題目 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。input 2個數n和k,表示n個人,數到k出列。2 n,k 10 6 output 最後剩...

51nod 1073 約瑟夫環

問題描述 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。輸入 2個數n和k,表示n個人,數到k出列。2 n,k 10 6 輸出 最後剩下的人的編號 樣例輸入 3 2...

51Nod 1073 約瑟夫環

1073 約瑟夫環 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 n個人坐成乙個圓環 編號為1 n 從第1個人開始報數,數到k的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。例如 n 3,k 2。2號先出列,然後是1號,最後剩下的是3號。input 2個數n和...