第九屆藍橋杯(國賽) 約瑟夫環

2021-10-23 15:16:38 字數 1238 閱讀 8109

題目描述

n 個人的編號是 1 ~ n,如果他們依編號按順時針排成乙個圓圈,從編號是1的人開始順時針報數。

(報數是從 1 報起)當報到 k 的時候,這個人就退出遊戲圈,下乙個人重新從 1 開始報數。

求最後剩下的人的編號。這就是著名的約瑟夫環問題。

本題目就是已知 n,k 的情況下,求最後剩下的人的編號。

輸入格式

題目的輸入是一行,2 個空格分開的整數 n, k

輸出格式

要求輸出乙個整數,表示最後剩下的人的編號。

樣例輸入

10 3

樣例輸出4

資料範圍

0 < n, k < 105

題解一

佇列(會超時):

#include

#include

using

namespace std;

queue<

int> q;

intmain()

else}

cout << q.

front()

<< endl;

return0;

}

題解二

遞推:

f[i]:有i個人參加遊戲時,剩下的人的編號(下標從 0 開始)。

由於下標從 0 開始,所以報k的是第k-1個人。從下乙個人開始,所有人重新從 0 開始編號,比如第k個人的編號變為0,…

那麼問題就轉變成:有i-1個人參加遊戲,剩下的人的編號,即f[i - 1]

原編號與新編號相差k,所以f[i] = f[i - 1] + k,又因為編號不能超過人數,所以還要% i

#include

using

namespace std;

int f[

1000010];

intmain()

第九屆藍橋盃國賽參賽體會

第一題,74,嗯,水題,做錯了,看成了一塊的是兩塊的10倍。第二題,暴力跑一分半,或者找一下規律,沒錯,就是斐波那契數列。第三題,格雷碼,樹狀陣列,我都沒學過這個東西,我用了幾個三目運算子,後來大大佬說這樣會錯,不滿足n 5的情況,emmmm。第四題,複雜度o n 我o n 2 emmmm,我怎麼這...

第九屆藍橋盃國賽 調手錶

小明買了塊高階大氣上檔次的電子手錶,他正準備調時間呢。在 m78 星雲,時間的計量單位和地球上不同,m78 星雲的乙個小時有 n 分鐘。大家都知道,手錶只有乙個按鈕可以把當前的數加一。在調分鐘的時候,如果當前顯示的數是 0 那麼按一下按鈕就會變成 1,再按一次變成 2 如果當前的數是 n 1,按一次...

第九屆藍橋杯(國賽) 調手錶

問題描述 小明買了塊高階大氣上檔次的電子手錶,他正準備調時間呢。在 m78 星雲,時間的計量單位和地球上不同,m78 星雲的乙個小時有 n 分鐘。大家都知道,手錶只有乙個按鈕可以把當前的數加一。在調分鐘的時候,如果當前顯示的數是 0 那麼按一下按鈕就會變成 1,再按一次變成 2 如果是 n 1,那麼...