約瑟夫環問題

f(n)表示有n個人,最后一個出局的人的編號
則f(n-1)表示有n-1個人,最后一個出局的人的編號

首先這一個大圓圈,我們從0開始給他們編號,然后開始從1報數,報數到K則出局
那么第一個出局的人,他的下標編號就是K-1

有一個出局的人之后,從他的下一個開始重新給他們編號,那么就是n-1個人,剛才編號是K的現在更新他的編號是0


靈魂畫師.png

0 -- 1 -- 2 -- 3 (f[n-1],即更新后最后一個出局的人的下標編號)
k -- k+1 -- k+2 -- k+3 (最后出局的人原本的的下標編號)

那么我們就找到了 f(n-1) 和 f(n) 的一個對應關系
f(n) = (f(n-1) + k) % 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;
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問題描述:n個人(編號0~(n-1)),從0開始報數,報到(m-1)的退出,剩下的人繼續從0開始報數。求勝利者的編...
    xinggang閱讀 1,105評論 0 1
  • 參考文章 約瑟夫環之二(用遞歸的思想解決Josephus問題) 解釋 解法 初始情況: 0, 1, 2 ........
    Mjolnir1107閱讀 1,025評論 0 1
  • 好久沒有看有關算法的問題了,今天廢了不少勁,再感嘆一句:要想學好算法就要常練習,沒什么捷徑可走。廢話不多說,如下:...
    時間已靜止閱讀 6,924評論 0 11
  • 百度百科: 約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓...
    KPort閱讀 3,882評論 0 4
  • 2019年對于韓國娛樂三巨頭之一的YG來說,可謂是多災多難。核心男團Bigbang多人服役,唯一活躍在公眾視野中的...
    水門汀女孩閱讀 3,661評論 1 2