f(n)表示有n個人沪么,最后一個出局的人的編號
則f(n-1)表示有n-1個人,最后一個出局的人的編號
首先這一個大圓圈,我們從0開始給他們編號酱吝,然后開始從1報數(shù),報數(shù)到K則出局
那么第一個出局的人土思,他的下標(biāo)編號就是K-1
有一個出局的人之后务热,從他的下一個開始重新給他們編號,那么就是n-1個人己儒,剛才編號是K的現(xiàn)在更新他的編號是0
靈魂畫師.png
0 -- 1 -- 2 -- 3 (f[n-1]崎岂,即更新后最后一個出局的人的下標(biāo)編號)
k -- k+1 -- k+2 -- k+3 (最后出局的人原本的的下標(biāo)編號)
那么我們就找到了 f(n-1) 和 f(n) 的一個對應(yīng)關(guān)系
f(n) = (f(n-1) + k) % n
代碼實現(xiàn)如下:
using namespace std;
const int N = 1000010;
int n, k;
int f[N];
int main()
{
f[1] = 0;
cin >> n >> k;
for(int i = 2; i <= n ; i++) f[i] = (f[i-1] + k) % i;
cout << f[n] + 1 << endl;
}