1樓:匿名使用者
1全部題目]:聽過這樣一個古老的傳說:有64名戰士被敵人俘虜了。
敵人命令他們拍成一圓圈,編上號碼1,2,3…,64。敵人把1號殺了,又把3號殺了,他們隔著一個殺一個這樣轉著圈殺。最後只剩下一個人,這個人就是約瑟夫斯。
請問約瑟夫斯是多少號?(這就是「約瑟夫斯」問題。)
這個問題解答起來比較簡單:敵人從1號開始,隔一個殺一個,第一圈把所有的奇數號碼的戰士圈殺光了。剩下的32名戰士需要重新編號,而敵人在第二圈殺死的是重新編號的奇數號碼。
由於第一圈剩下的全部是偶數號2,4,6,…,64。把它們全部用2去除,得1,2,3,…,32。這是第二圈編的號碼。
第二圈殺過以後,又把奇數號碼都殺掉了,還剩16個人。如此下去,可以想到最後剩下的必然是64號。
64=26,它可以連續被2整除6次,是從1到64中能被2整除次數最多的數,因此,最後必然把64 號留下。
如果有65名戰士被俘,敵人還是按上述的方法殘殺戰士,最後還會剩下約瑟夫斯嗎?
經過計算,很容易得到結論,不是。因為第一個人被殺後,也就是1號被殺後,第二個被殺的是必然3號。如果把1號排除在外,那麼還剩下的仍是64人,新1號就是3號。
這樣原來的2號就變成了新的64 號,所以剩下的必然是2號。
進一步的歸類,不難發現如果原來有2k個人,最後剩下的必然2k號;如果原來有2k+1個人,最後剩下2號;如果原來有2k+2個人,最後剩下4號……如果原來有2k+m個人,最後剩下2m號。
比如:原來有100人,由於100=64+36=26+36,所以最後剩下的就是36×2=72號;又如:原來有111人,由於100=64+47=26+47,所以最後剩下的就是47×2=94號。
【基礎】約瑟夫問題
2樓:匿名使用者
我原來寫的,不知道合不合你的情況,希望能給你幫助,另外程式設計還是要靠自己。
望採納//約瑟夫問題。
#include ""
#include ""
#include "vector"
using namespace std;
void main()
j++;本輪+1*/
}if(i==s-1)/*重新遍歷每個人*/i=-1;
if(k==s)/*全部輸出完成時結束*/break;
}system("pause");
什麼是約瑟夫斯問題?
3樓:易書科技
這是一個古老的傳說:有64名戰士被敵人俘虜了,敵人命令他們排成一個圓圈,編上號碼1,2敵人把1號殺了,又把3號殺了,他們是隔一個殺一個這樣轉著圈殺,最後剩下一個人,這個人就是約瑟夫斯,請問約瑟夫斯是多少號?這就是「約瑟夫斯問題」。
這個問題是比較容易解答的:敵人從1號開始,隔一個殺一個,第一圈把奇數號碼的戰士全殺死了。剩下的32名戰士需要重新編號,而敵人在第二圈殺死的是重新編排的奇數號碼。
由於第一圈剩下的全部是偶數號2,4把它們全部用2除,得1,2這是第二圈重新編的號碼,第二圈殺過之後,又把奇數號碼都殺掉了,還剩下16個人,如此下去,可以想到最後剩下的必然是64號。
64=它可以連續被2整除6次,是從1到64中能被2整除次數最多的數,因此,最後必然把64號剩下,從64=還可以看到,是轉這6圈之後,把約瑟夫斯剩下來的。
如果有65名戰士被俘,敵人還是按上述方法殘殺戰士,最後剩下的還是64號約瑟夫斯嗎?
不是了,因為第一個人被殺後,也就是1號被殺後,第二個被殺的必然是3號,如果把1號排除在外,那麼剩下的仍是64個人,對於剩下這64個人,新1號就應該是原來的3號,這樣原來的2號就變成新的64號了,所以剩下的必然是原來的2號。
對於一般情況來說,如果原來有2k個人,最後剩下的必然是2k號;如果原來有2k+個人,最後剩下的是2號;如果原來有2k+個人,最後剩下的是4號……如果原來有2k+個人,最後剩下的是2m號。
比如,原來有100人,由於100所以最後剩下的是2×3號;又比如,原來有111人,由於111所以最後剩下的是2×4號。
下面把問題改一下:不讓被俘的戰士站成圓圈,而排成一條直線,然後編上號碼,從1號開始,隔一個殺一個,殺過一遍之後,然後再重新編號,從新1號開始,再隔一個殺一個,問最後還是約瑟夫斯嗎!
答案是肯定的,最後剩下的仍然是約瑟夫斯。
如果戰俘人數是65人呢?剩下的還是約瑟夫斯,只要人數不超過128人,也就是人數小於27,那麼最後剩下的總是約瑟夫斯,因為從1到128中間,能被2整除次數最多的就是64,而敵人每次都是殺奇數號留偶數號,所以64號總是最後被留下的人。
約瑟夫問題的一般形式
約瑟夫難題的約瑟夫指的是哪位約瑟夫?
4樓:淄熙
據說著名猶太歷史學家 josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下一個重新報數,直到所有人都自殺身亡為止。然而josephus 和他的朋友並不想遵從,josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。
17世紀的法國數學家加斯帕在《數目的遊戲問題》中講了這樣一個故事:15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了一個辦法:30個人圍成一圓圈,從第一個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。
問怎樣排法,才能使每次投入大海的都是非教徒。 *問題分析與演算法設計 約瑟夫問題並不難,但求解的方法很多;題目的變化形式也很多。這裡給出一種實現方法。
題目中30個人圍成一圈,因而啟發我們用一個迴圈的鏈來表示。可以使用結構陣列來構成一個迴圈鏈。結構中有兩個成員,其一為指向下一個人的指標,以構成環形的鏈;其二為該人是否被扔下海的標記,為1表示還在船上。
從第一個人開始對還未扔下海的人進行計數,每數到9時,將結構中的標記改為0,表示該人已被扔下海了。這樣迴圈計數直到有15個人被扔下海為止。
什麼是約瑟夫問題?
5樓:上海獨品新感覺
約瑟夫問題是個有名的問題:n個人圍成一圈,從第一個開始報數,第m個將被殺掉,最後剩下一個,其餘人都將被殺掉。例如n=6,m=5,被殺掉的人的序號為5,4,6,2,3。
最後剩下1號。
假定在圈子裡前k個為好人,後k個為壞人,你的任務是確定這樣的最少m,使得所有的壞人在第一個好人之前被殺掉。
約瑟夫問題的介紹
6樓:草莓果醬
約瑟夫問題(有時也稱為約瑟夫斯置換,是一個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱「丟手絹問題」.)
誰知道這是什麼蟲子? 20,誰知道這是什麼蟲子
黑水虻黑水虻 hermetia illucens l.腐生性的水虻科昆蟲,能夠取食禽畜糞便和生活垃圾,生產 值的動物蛋白飼料,因其繁殖迅速,生物量大,食性廣泛 吸收轉化率高,容易管理 飼養成本低,動物適口性好等特點,從而進行資源化利用,其幼蟲被稱為 鳳凰蟲 成為與蠅蛆 黃粉蟲 大麥蟲等齊名的資源昆蟲...
有誰知道什么單機遊戲好玩,有誰知道什麼單機遊戲好玩
使命召喚5世界戰爭 拿光碟下。用網路下太慢了,得6小時 龍珠cs,龍珠對打遊戲,no yes 遊戲王國 好玩的單機有 騎馬與 2 它是備受期待的中世紀戰鬥模擬器和角色扮演遊戲 騎馬與 的續集。設定200年前,它擴大了詳細的戰鬥系統和卡爾拉迪亞的世界。用攻城引擎轟炸山間要塞,在城市的後巷建立祕密的犯罪...
有誰知道這款電腦遊戲叫啥名字,誰知道這款經典的單機遊戲叫什麼名字?
不知道你問的是不是 星際爭霸 星空早無言 橫掃千軍 你看看是不是 惡魔nb男路 是不是紅警啊,在不就是卡恩之怒的遊戲.有誰知道這款電腦遊戲叫啥名字 戊潔 owl city的 when can i see you again?誰知道這款經典的單機遊戲叫什麼名字? 也有叫三國志 或者三劍聖 什麼的 輸入...