1. 程式人生 > >【資料結構演算法】約瑟夫環問題(線性表)

【資料結構演算法】約瑟夫環問題(線性表)

據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下一個重新報數,直到所有人都自殺身亡為止。然而Josephus 和他的朋友並不想遵從。首先從一個人開始,越過k-2個人(因為第一個人已經被越過),並殺掉第k個人。接著,再越過k-1個人,並殺掉第k個人。這個過程沿著圓圈一直進行,直到最終只剩下一個人留下,這個人就可以繼續活著。問題是,給定了和,一開始要站在什麼地方才能避免被處決?Josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。

相關推薦

資料結構演算法問題線性

據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下一個重新報數,直到所有人都自殺

線性寫法

1073 約瑟夫環 1 秒   131,072 KB   0 分   基礎題 N個人坐成一個圓環(編號為1 - N),從第1個人開始報數,數到K的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。 例如:N

演算法

有n 個人圍城一圈每次從1數起數到3就把那個人提出圈子,最後只保留一個人。 輸入: 輸入人數字符串輸出:把最後一個人所保留位置返回出來。比如你輸入11 的話即有11個人 [1,2,3,4,5,6,7,8,9,10,11] 。返回的是7   &n

資料結構06二叉平衡樹AVL樹

目錄 一、平衡二叉樹定義 二、這貨還是不是平衡二叉樹? 三、平衡因子 四、如何保持平衡二叉樹平衡? 五、平衡二叉樹插入節點的四種情況 六、平衡二叉樹操作的程式碼實現

問題順序

# include "stdlib.h"# include "stdio.h"# include "conio.h"# define nmax 255main(){int i,j,k,m,n,num[n

報數遊戲java實現

開端 公司組織考試,一拿到考題,就是演算法裡說的約瑟夫環,仔細想想 以前老師將的都忘了,還是自己琢磨把~ package basi

演算法資料結構——Josephus Problem(問題)

約瑟夫問題 維基百科,自由的百科全書 跳到導航 跳到搜尋 約瑟夫問題(有時也稱為約瑟夫斯置換),是一個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。 人們站在一個等待被處決的圈子裡。 計數從圓圈中的指定點開始,並沿指定方向圍繞圓圈進行。 在跳過指定

c++提問問題

ocl wmi lsa rul 2dx hdp and kml eee 家煩堵zx1ul秩枷言http://weibo.com/u/6221316968部坎夢8t970帕糖良http://weibo.com/u/6378557985兜杉稚k9v00劑重凸http://wei

Luogu1996問題模擬,解法彙總

problem n個人,每次數到m的人出隊 輸出出隊順序 n<=100 solution1 模擬:每次列舉第m個人出隊 O(n,m) #include<iostream> using namespace std;

OJ問題

#include<stdio.h> class Person{ public: int name; bool flag; }; int main() { int m = 0; // 一共m個人 int n = 0; // 從1開始報數 報到n的那

51NOD-1875-丟手絹 +暴力

51NOD1875丟手絹 題意就是約瑟夫環問題,n個人每次向後傳遞k次然後這個人退出遊戲,問最後一個人是誰。 這道題給出n,一共2*n個人進行遊戲,要求前n個退出遊戲的人序號在n+1-2n之間, 由於這道題n只有14,我們只要暴力算出14種情況即可,但是這裡暴力

資料結構--迴圈佇列解決問題純c

#ifndef __JOSEPHUS_H__ #define __JOSEPHUS_H__ #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int QEl

資料結構——迴圈連結串列

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 提示:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。 樣例: 輸入: 10 3 1 //分別為總數,出列的人數到的數字,開始數的人的編號。 輸出:

Python列表基礎問題

比較簡單,沒啥好說的嚶嚶嚶~ # -*- coding: utf-8 -*- """ Created on Sun Nov 4 15:30:35 2018 @author: wyt """ #約瑟夫問題 #佇列移動sep單位 def move(man,sep):

資料結構演算法如何使用棧計算字尾表示式

無聊寫的一個使用棧計算字尾表示式的程式碼: 初次寫,只有+-*/四個運算子,後面可以自己加,都差不多就是個算術運算子優先順序的問題。 主函式:包括初始化*+-/符號,判斷輸入的字元是運算元還是運算子。 /** * !!!!!(棧相關測試) * @author WZ

資料結構 C語言 問題

一、問題描述:約瑟夫問題 一個旅行社要從n個旅客中選出一名旅客,為他提供免費的環球旅行服務。旅行社安排這些旅客圍成一個圓圈,從帽子中取出一張紙條,用上面寫的正整數m作為報數值。遊戲進行時,從第s個人開

演算法練習 JAVA

已知n個人(以編號1,2,3...n分別表示)按既定的方向圍坐在一張圓桌周圍。從編號為k的人開始按既定方向報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列

使用C語言單向迴圈連結串列來解決

題目描述 編號為1,2,…,n的n個人按順時針方向圍坐在一張圓桌周圍,每人持有一個密碼(正整數)。一 開始任選一個正整數m作為報數上限值,從第一個人開始按順時針方向自1開始報數,報到m時停止報數,報m的那 個人出列,將他的密碼作為新的m值,從他順時針方向的下一個人開始重新從1報數,

猴子選大王問題

資料結構與演算法之約瑟夫環。 與其枯燥的講解約瑟夫環,倒不如用約瑟夫環來解決一個有趣的問題。 猴子選大王問題:     現在有N個猴子需要選取一個猴王,這N個猴子手拉手圍成一個圈,旁邊有一位德高望重的老猴,先將這一圈猴按順時針方向編號1,2.......N,然後

連結串列法,公式法

約瑟夫環作為一個數學問題,它的程式碼實現方式有很多,比如迴圈連結串列,公式解決或者動態規劃,之前參考資料也有用遞迴解決的。Anyway,這些都是解決約瑟夫環問題很有效的方法。這裡總結兩種方法,迴圈連結串列法和公式法。 首先是迴圈連結串列法,它的原理很簡單,也很容