數字圍乙個圈,依次去掉下乙個,最後剩下什麼?

時間 2021-05-30 03:27:26

1樓:蘇莉安

正如前乙個答案所說,此題其實是約瑟夫斯問題的乙個最小特例,維基百科裡就有詳細解釋和證明了(英文版更詳細)。不過我猜一看公式就頭暈的人應該不少,那麼這裡就給出乙個通俗還帶圖的講解。

首先我們拿個不算很大的數字出來,就用11吧,圍成一圈隔乙個去掉乙個,最後剩下的是7

懷疑的話可以自己算算看。懶得算?我做了個小演示工具,進去試試。(瀏覽器要支援HTML5)

把左上角的總數改成11,點「開始」。

嗯,總之我們的結果是7,這個毋庸置疑。

接下來就能直接推算出12個數字時剩下的是哪個,不用再從頭算一遍了。

原理十分簡單:

先把12個數字排成一圈,從1開始,去掉右邊的2:

現在剩下的就是11個數字了吧。

那麼它和原本只有11個數字的時候相比,有什麼區別呢?

唯一區別就是,下一步要跳過3,去掉右邊的4;而原本只有11個數字時,去掉的是1右邊的2。

對比一下:

換句話說,12個數字只要經過了第一步之後,剩下的11個和原本就是11個數字的情況相比,只是順時針旋轉了兩個數字而已,除了編號之外就沒有什麼區別了。

11個數字時最後剩下的是7,那麼順時針旋轉兩個就是9。

也就是說,12個數字中最後剩下的是9

同理可算出13個數字剩下的是11;14個數字是13;15個數字是15。

且慢,現在都剩到15了,再增加的話會怎樣呢?

一直以此類推下去,就能算出所有數字的結果了。

從1開始,每個數字對應的最終生還者如下表:

1 :1

2-3 :1 3

4-7 :1 3 5 7

8-15 :1 3 5 7 9 11 13 15

16-31 :1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31

32-....:1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39...

可以看出,每行的個數翻倍,然後回到1重新開始。

根據上述結論歸納出計算方法。

設總數為,最終剩下的數字為,則函式公式為:

其中floor指的是向下取整函式,而則是比n小的、最大的2的冪值。

用這個公式可以算出,當一共有1000個數字時,最終剩下的是977

有時間的話不妨在演示工具上測一下,不測也沒關係,結果長這樣:

勤奮好學的你可能會想,如果間隔的不是乙個,而是兩個三個乃至多個,是不是也有這麼方便的計算公式呢?

遺憾的是,約瑟夫斯問題在間隔超過1時不存在通用的簡單公式,只能逐個遞推。

原理仍然和我們最早由11推出12時所用的方法一致:如果每隔k個數字去掉乙個,那麼我們知道n的結果後,就能推出n+1時的結果。在n的基礎上順時針旋轉k+1個位置,轉過一圈的話就從頭開始。

也就是(其中mod n指的是對n取餘數)

你可以驗證一下,把演示工具的總數和間隔數隨便改改,勾選「連續執行」,讓它自己跑去吧。下面會記錄下一大串結果,看看是不是符合這個公式。

可以寫出乙個簡潔優美的依次給出下乙個排列的函式嗎?

flowmemo 你這個是要求三個向量的笛卡兒積,python的itertools裡已經自帶了。實現的話,將輸出的組合向量想象成三位的記分牌 或里程表 模仿一下記分牌的記分進製過程就行。 知之 一 python的標準API裡已經提供了該功能,如此即可 from itertools import pr...

你更害怕成為下乙個肖戰,還是成為下乙個AO3?

渣乎繼續刪!回答的四五個問題,一涉及到你那位,直接給我刪掉,那就說明,我戳到某人痛處了!對,陰謀背後,就必定是有wyb,最大贏家!我不混粉圈,不追星,就事論事,少來逼逼,證據自尋微博四小花旦。憑你那整容臉和渣渣學歷,你就差帥哥十萬八千里!人在做天在看,好自為之! iceteea 下乙個ao3,ao3...

下乙個幣買什麼?

Baby旺 幣安鏈的,1doge,市值低可以埋伏0x40619dc9F00ea34e51D96b6EC5d8a6aD75457434,九月份出遊戲 俗人 優質defi uni專案組 慢霧審計 千萬機構大戶 社群團隊強大共識 FlokiDoge!跨鏈 nft 彩票 期權,780111208 懶懶的珊子...