C語言經(jīng)典面試題-約瑟夫環(huán)問題分析

好久沒有看有關(guān)算法的問題了底哗,今天廢了不少勁岁诉,再感嘆一句:要想學(xué)好算法就要常練習,沒什么捷徑可走跋选。廢話不多說涕癣,如下:

問題描述:有m個人,圍成一個環(huán),編號為 0前标、1坠韩、2、3炼列、只搁、、m-1俭尖,從第一個人開始循環(huán)報數(shù)氢惋,假設(shè)數(shù)到n的那個人出列,然后從下一個人繼續(xù)數(shù)數(shù)目溉,數(shù)到n出列明肮,以此循環(huán),最后那個人為勝利者缭付,求勝利者的編號。

分析如下:
設(shè)m為人的個數(shù) n為要數(shù)的數(shù) k為從第幾個人開始數(shù).

第一次的數(shù)列循未,記為A:
0 1 2 3 4 5 6 7 8 9 陷猫、、的妖、n%m k绣檬、、嫂粟、m-2 m-1

假設(shè)第一次出列了一個人娇未,則編號肯定為n%m-1(減1因為從零開始)。k=n%m星虹,第一次出列后的數(shù)列為:
0 1 2 3 4 5 6 7 8 9 零抬、、宽涌、k平夜、、卸亮、m-2 m-1

第二次從k開始數(shù)數(shù)那么可以組成新的數(shù)列忽妒,記為數(shù)列B:
k->0
k+1->1
k+2->2
k+3->3


段直、
k-3->m-3
k-2->m-2
如果我們知道了數(shù)列B的最終勝利者是的編號是x吃溅,那么x在原來數(shù)列A中的編號是多少呢?很容易算出來:(x+k)%m,而k=n%m,替換后為(x+n%m)%m=(x+n)%m鸯檬,(x+n)%m為數(shù)列A的勝利者罕偎。那么x又該如何求呢,我們可以求數(shù)列C京闰,就這樣這么以次類推颜及。直到只有一個人時,勝利者的編號肯定為0.
假設(shè)f(y)為勝利者:則有
f(1)=0俏站;
f(2)=(f(1)+n)%2;
f(y)= (f(y-1)+n)%y; y為數(shù)列的人數(shù),n為要數(shù)的數(shù)

以下為編程實現(xiàn)痊土,將f(y)替換為number肄扎,y替換為i

/*********************************************************************** 
**m總?cè)藬?shù),則標號為0~m-1   n為要數(shù)的數(shù) 
**成功返回序號1~m赁酝,失敗返回-1 
***********************************************************************/  
int winner(int m, int n)  
{  
    int i;  
    int number;  
    if (m <= 0 || n <= 0) {  
        return -1;  
    }  
    number = 0;                        /* 當只有一個人時,編號為0的出圈 */  
    for (i = 2;i <= m;i++) {           /* 循環(huán)m-1次將剩下一個人         */  
        number = (number + n % i) % i; /* 這樣寫易理解衡载,或(number+n)%i  */  
    }  
    return number + 1;                 /* 程序從0編號隙袁,返回時應(yīng)+1       */  
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菩收,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坡贺,老刑警劉巖箱舞,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異褐缠,居然都是意外死亡,警方通過查閱死者的電腦和手機公般,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門官帘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酗捌,你說我怎么就攤上這事涌哲。” “怎么了阀圾?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵初烘,是天一觀的道長。 經(jīng)常有香客問我肾筐,道長,這世上最難降的妖魔是什么东亦? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任讥此,我火速辦了婚禮谣妻,結(jié)果婚禮上卒稳,老公的妹妹穿的比我還像新娘。我一直安慰自己充坑,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著也榄,像睡著了一般司志。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骂远,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天腰根,我揣著相機與錄音,去河邊找鬼瘸恼。 笑死册养,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的冰啃。 我是一名探鬼主播阎毅,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼扇调,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抢肛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎福稳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鼓拧,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡季俩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年酌住,在試婚紗的時候發(fā)現(xiàn)自己被綠了赂韵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡祭示,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稠歉,到底是詐尸還是另有隱情,我是刑警寧澤怒炸,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布毡代,位于F島的核電站,受9級特大地震影響捏鱼,放射性物質(zhì)發(fā)生泄漏酪耕。R本人自食惡果不足惜导梆,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一看尼、第九天 我趴在偏房一處隱蔽的房頂上張望藏斩。 院中可真熱鬧却盘,春花似錦、人聲如沸谷炸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至场航,卻和暖如春溉痢,著一層夾襖步出監(jiān)牢的瞬間憋他,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工镀娶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梯码,地道東北人轩娶。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓罢坝,卻偏偏與公主長得像嘁酿,于是被迫代替她去往敵國和親男应。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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

  • sì 支zhī茶chá 對duì 酒jiǔ,賦fù 對duì 詩shī借卧,燕yàn子zi 對duì 鶯yīng 兒é...
    每個人的孟母堂閱讀 1,199評論 0 6
  • 一年級語文上冊生字表 生字表一(共400字) 啊(ā)愛(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang閱讀 2,772評論 0 6
  • 文|妤小兮 21天會形成一個習慣,在畫畫22天的今天影晓,我突然有了把女兒和我的合作畫作整理出來的想法檩禾。嗯~不錯盼产,我們...
    愛育兒的靜一閱讀 265評論 0 2
  • 酒孔子說:無量 過量戏售,傷身及亂蜈项。適量续挟,怡情延年。 然而跑芳,說起來容易直颅,做起來難。 根據(jù)自己多年的經(jīng)歷和親身體驗盆佣,我想...
    道形圖閱讀 421評論 11 9
  • 每個人來到這世上共耍,都會遇見許多人痹兜,人生何處不相逢呢颤诀。 我喜歡在過街天橋上看人來人往。 我喜歡在馬路邊上看車輛川流不...
    黑茉莉97閱讀 244評論 0 0