約瑟夫問題

今天看了一下約瑟夫問題,嗯,感覺自己智商欠費:( 還是來總結(jié)下好啦~

問題

約瑟夫是猶太軍隊的一個將軍,在反抗羅馬的起義中,他所率領(lǐng)的軍隊被擊潰,只剩下殘余的部隊40余人,他們都是寧死不屈的人,所以不愿投降做叛徒。一群人表決說要死,所以用一種策略來先后殺死所有人。
于是約瑟夫建議:每次由其他兩人一起殺死一個人,而被殺的人的先后順序是由抽簽決定的,約瑟夫有預(yù)謀地抽到了最后一簽,在殺了除了他和剩余那個人之外的最后一人,他勸服了另外一個沒死的人投降了羅馬。

我們這個規(guī)則是這么定的:
在一間房間總共有n個人(下標(biāo)0~n-1),只能有最后一個人活命。

按照如下規(guī)則去殺人:
所有人圍成一圈
順時針報數(shù),每次報到q的人將被殺掉
被殺掉的人將從房間內(nèi)被移走
然后從被殺掉的下一個人重新報數(shù),繼續(xù)報q,再清除,直到剩余一人

輸入

人的個數(shù) : n
每次報到q 就會被殺死 的 q

輸出

最終能夠活下來的人的下標(biāo)

相關(guān)解析

1、https://blog.csdn.net/tingyun_say/article/details/52343897
2、http://www.cnblogs.com/kkrisen/p/3569281.html#undefined

分析

第一次報數(shù)殺掉的是下標(biāo)為(q-1)人
q ? ? ? 0
q+1 ? ? 1
: ? ??? :
: ? ? ?? :
n-1 ? ? n-q-1
0 ? ?? n-q
1 ? ?? n-q+1
: ? ? ?? :
: ? ? ?? :
q-2 ? ? n-2

由上述可見,殺掉一個人后,重新組成了一個約瑟夫環(huán),重新組成的約瑟夫環(huán)的下標(biāo)和之前的下標(biāo)關(guān)系為 f(n)=(f(n-1)+q)%n。當(dāng)最后只剩下一個人的時候,它的下標(biāo)為0,我們可由上述的遞推關(guān)系得到只剩下兩個人時它的下標(biāo),然后再推得只剩下3個人時它的下標(biāo),一直推到最后有n個人時,它的下標(biāo),就得到了最終的結(jié)果。請注意,這樣的解法所得到的坐標(biāo)是從以0--(n-1)為基準(zhǔn)的,如果想獲得以1--n為基準(zhǔn)下的,直接將所得的結(jié)果加1就好了,很直觀的解釋就是將下標(biāo)值加1。
另一個解釋:
f(1, 1) = 1;
f(n, k) = (f(n-1, k) + k - 1)%n + 1;

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n, q;
    cin >> n >> q;
    if (n == 0)
        return 0;
    int result = 0;
    for (int i = 2; i <= n; i++)
        result = (result + q ) % i;
    
    return result+1;
}

變型問題

poj上有個變型問題,題目鏈接:http://poj.org/problem?id=3517,這個題與經(jīng)典約瑟夫問題的區(qū)別是,它要求第一個殺死的人下標(biāo)為m,并且下標(biāo)從1開始。對于這個問題的求解,我們可以按照原來方法去做,得到結(jié)果后再去移動下標(biāo)。在原來的問題中,第一個殺死的人下標(biāo)為q,我們想辦法移動下標(biāo)使得第一個殺死的人由q變?yōu)閙,假如n=5,q=2,m=4, 那么原始序列為
1, 2, 3,4,5
如果使得第一次殺死的人為m, 那么序列應(yīng)為
3 , 4 , 5 ,1 , 2
那么由上面的如何得到下面的結(jié)果
f(下)= (f(上)+m-q)%n

// yuesefu.cpp : 定義控制臺應(yīng)用程序的入口點。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int n, q, m;
    cin >> n >> q>> m;
    if (n == 0)
        return 0;
    int mid = 0;
    for (int i = 2; i <= n; i++)
        mid = (mid + q ) % i;
    int result = 0;
    result = (mid + 1 + m - q) % n;
    if (result < 0) result = result + n;
    return result;
}

留個坑

1、打印每次淘汰的人
https://blog.csdn.net/coder_pig/article/details/50268099
2、如何用python實現(xiàn)?

index, step = 0, 3    
while len(a) > 1:
    index = (index + step - 1) % len(a)    
    print('kill No.', a[index])
    del a[index]
print('\nWinner is', a[0])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內(nèi)容

  • 本系列博客習(xí)題來自《算法(第四版)》,算是本人的讀書筆記,如果有人在讀這本書的,歡迎大家多多交流。為了方便討論,本...
    kyson老師閱讀 1,489評論 0 49
  • 問題來源 據(jù)說著名猶太歷史學(xué)家Josephus有過以下的故事:在羅馬人占領(lǐng)喬塔帕特后,39個猶太人與Josephu...
    AceKitty閱讀 875評論 1 5
  • 貼一篇博客,寫的還行經(jīng)典約瑟夫問題的快速求解除了循環(huán)鏈表模擬,和動態(tài)規(guī)劃求解還可以利用樹狀數(shù)組,樹狀數(shù)組的時間復(fù)雜...
    陌路晨曦閱讀 642評論 0 0
  • 題目地址:http://poj.org/problem?id=1012 問題描述:約瑟夫問題是這樣一個問題,N個人...
    其中一個cc閱讀 740評論 0 0
  • 針對昨天說的三無去旅游場景:不知去哪里、不知什么時候去、更重要的沒什么錢 天巡旅行是這么解決的: 1. 點擊首頁的...
    曉潔Fanny閱讀 370評論 6 2