佇列法求解約瑟夫環問題
#include<bits/stdc++.h> using namespace std; int main() { int n,p; cin>>n>>p; queue<int> qu; for(int i=1;i<=n;i++) qu.push(i); while(!qu.empty()) { for(int k=1;k<p;k++) { int a=qu.front(); qu.pop(); qu.push(a); } if(qu.size()==1) cout<<qu.front(); else cout<<qu.front()<<' '; qu.pop(); } return 0; }
相關推薦
佇列法求解約瑟夫環問題
#include<bits/stdc++.h> using namespace std; int main() { int n,p; cin>>n>>p; queue<int> qu; for(int i=1;i<
使用順序表求解約瑟夫環問題 (自定義順序表)
約瑟夫環(Josephus)問題:古代某法官要判決n個犯人的死刑,他有一條荒唐的法律,將犯人站成一個圓圈,從第s個人開始數起,每數到第d個犯人,就拉出來處決,然後再數d個,數到的人再處決……直到剩下的最後一個可赦免。當n=5,s=1,d=2,時: 第一步:定義一個順序表Se
順序迴圈結構(迴圈佇列)模擬約瑟夫環
#include<iostream.h>void InQ(int Q[],int x);void OutQ(int Q[]);int GetHead(int Q[]);int rear,front;const int N=100;//支援100以下個的資料void
使用順序表求解約瑟夫環問題
//distance 想要第幾個出局.就傳入引數為幾 private static void josephus(int[] array,int distance){ ArrayList
遞迴求解約瑟夫環問題
01 2345 34 012 01 23 12 0 10 0 假設每一輪報到3的人死亡,然後從死亡的人後一位開始重新編號,以此類推,會形成上面的表格,最後留下的人的編號在開始的時候可以看到是0;那麼要如何求出最後留下的人的編號呢? (求同一個人在不同輪數中的編號) 首先,從
約瑟夫環問題求解(迴圈連結串列法)
#include <stdio.h> #include <stdlib.h> typedef struct node{ int elem; struct node *next; }NODE; int count = 0,n; void main
51nod 1073約瑟夫環 遞歸公式法
tar con for names 問題 print 第一個 描述 span 約瑟夫環問題的原來描述為,設有編號為1,2,……,n的n(n>0)個人圍成一個圈,從第1個人開始報數,報到m時停止報數,報m的人出圈,再從他的下一個人起重新報數,報到m時停止報數,報m的出圈
約瑟夫環——鏈表法
name display ace style int eof == using esp #include <iostream> #include <stdlib.h> using namespace std; typedef str
關於約瑟夫環的幾種求解問題
問題描述:0,1,2......,n-1這n個數字排成一個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡最後剩下的數字。 例如:0,1,2,3,4這5個數字組成一個圓圈,從數字0開始每次刪除第三個數字,則刪除的前四個數字依次是2,0,4,1,因此最後剩下的數字是3. 解法
迴圈佇列之約瑟夫環
此問題的要求為:n個人圍坐一圈,從第一個人開始數,每數到k,這個人就出列,圈中的下一個人重新從1開始計數,直到剩餘人數不足k人 下面我畫圖來加深理解(抱歉目前還不會用電腦繪製動畫,只好手動繪製,比較粗糙,之後有時間我改進下!!(看起來像個效果器上面的一堆旋鈕哈哈哈 下面附上完整
JavaScript實現迴圈佇列與約瑟夫環問題的解決
function MyCircularQueue(){ var items = []; //向佇列插入元素 this.enQueue = function(value){ return items
Python實現資料結構佇列約瑟夫環問題
問題描述: 人們站在一個等待被處決的圈子裡。 計數從圓圈中的指定點開始,並沿指定方向圍繞圓圈進行。 在跳過指定數量的人之後,執行下一個人。 對剩下的人重複該過程,從下一個人開始,朝同一方向跳過相同數量
約瑟夫環(連結串列法,公式法)
約瑟夫環作為一個數學問題,它的程式碼實現方式有很多,比如迴圈連結串列,公式解決或者動態規劃,之前參考資料也有用遞迴解決的。Anyway,這些都是解決約瑟夫環問題很有效的方法。這裡總結兩種方法,迴圈連結串列法和公式法。 首先是迴圈連結串列法,它的原理很簡單,也很容
約瑟夫環問題求解--程式+詳細註解
約瑟夫環問題起源於一個猶太故事。約瑟夫環問題的大意如下 羅馬人攻佔了橋塔帕特,41個人藏在一個山洞中躲過了這場浩劫。這41個人中,包括歷史學家約瑟夫和他的一個朋友。剩餘的39個人為了表示不向羅馬人屈服
約瑟夫環高效陣列法
今天我老師給我講了一種新的解題方法 時間複雜度為o(kn),算是一種比較高效的方法 #include<stdio.h> #define N 100 void solve(int man[],int people,int specing) { int
約瑟夫環問題的兩種解決方式(遞迴求解和陣列模擬求解)
約瑟夫環問題各位Acmer肯定都遇到過,就是給你編號為從0~n-1的n個人,從頭開始報數,報到m的人離場,問最後留下的人是幾號。有兩種方法解決這個問題 第一種:陣列模擬 這種方法沒什麼好說的,就是模擬報數和離場的過程,加個訪問陣列標記一下誰離場了就好了 package H
C/C++面試之算法系列--約瑟夫環:每隔兩個迴圈刪除陣列元素,求最後刪除者的下標問題
對於只讀陣列,普通的標誌法都不能用了,將高位置1遍歷完後清除的方法借鑑意義最高;時間和空間效率最均衡;連結串列法可以處理只讀陣列的問題;迴圈佇列法此時無法實現;當然對於標誌法,可以額外申請空間儲存標誌,也可以處理只讀問題,但空間效率下來了 (adsbygoogle = window
【CSP 201712-2】遊戲(約瑟夫環+佇列)
CSP 201712-2 遊戲 問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方
約瑟夫環——公式法(遞推公式)
約瑟夫問題 約瑟夫問題是個著名的問題:N個人圍成一圈,第一個人從1開始報數,報M的將被殺掉,下一個人接著從1開始報。如此反覆,最後剩下一個,求最後的勝利者。 例如只有三個人,把他們叫做A、B、C,他們圍成一圈,從A開始報數,假設報2的人被殺掉。 首先A開
約瑟夫環出圈問題三種求解方法
<pre name="code" class="python">#coding=utf-8 # 遞迴直接求出 def fun_recursion(m,k): """ f[