簡單約瑟夫環模板(C++版)
hdu2211
#include <bits/stdc++.h>
using namespace std;
int t;
long long n,k;
//函式返回的就是勝利者編號
long long cir(long long n,long long m){
//遞迴邊界
if(n==k){
return k;
}
//一輪過去後剩下n-n/k人
//x就是下一輪也就是最後勝利者的編號
long long x=cir(n-n/k,k);
//在這一輪的編號t=(x-1)-(x-1)/k+1再化簡
return ( x-1)/(k-1)+x;
}
int main(void){
scanf("%d",&t);
while(t--){
scanf("%lld%lld",&n,&k);
printf("%lld\n",cir(n,k));
}
return 0;
}
相關推薦
簡單約瑟夫環模板(C++版)
hdu2211 #include <bits/stdc++.h> using namespace std; int t; long long n,k; //函式返回的就是勝利者編號 long long cir(long long n,long long m){ /
約瑟夫環問題(josephus problem)詳解
約瑟夫環問題描述: 編號為1,2,3…n的人一詞圍成一圈,從第k個人開始報數(從1開始),數到m的人退出。接著下一個人又從1開始報數,數到m的人退出,以此類推。問:剩下的人的編號是多少? 如:n=6,m=3,k=1 原始序列: 1 2 3 4 5 6 ; 從編號1開始報數 第一輪數完後的
【資料結構演算法】約瑟夫環問題(線性表)
據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下一個重新報數,直到所有人都自殺
C語言用陣列1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入一個數T,從1號開始報數,報到T的人出圈;下一人又從1開始報數,下一個報到T的人出圈,輸出出圈順序。 考慮問實現約瑟夫環問題
1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入一個數T,從1號開始報數,報到T的人出圈;下一人又從1開始報數,下一個報到T的人出圈,輸出出圈順序。 考慮問題: 報到T的人出圈,怎麼表示出圈?要麼刪除對應的標號,其他的標號前移(如果是陣列結構,要依次移動
約瑟夫環問題(迴圈連結串列實現C)
約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 以下是程式碼實現(c語
C語言經典演算法100例-069-簡單約瑟夫環問題
這裡我們實現一個簡單的約瑟夫環問題,描述如下: 有N個人站成一圈,從第一個人開始報數,從1報到3,報到3的那個人走出圈,然後從下一個人開始從1繼續報數,重複上面的過程,直到最後圈裡只剩下一個人,問這個人是哪個人? 分析:首先,我們要給這N個人編號,分別編為1到N, 然後,開
C語言,陣列實現約瑟夫環問題(兩種方法)
約瑟夫環問題:約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 第一種方法:要求將每次
資料結構—約瑟夫環問題(迴圈單鏈表)
n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 解題思路:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。迴圈單鏈表:尾指標指向頭結點。這樣指標可以迴圈移動。 可以使用兩個指標來操作,將指標q指向需要操作的結點上,指標p指向需要操作結點的前
孩子們的遊戲(圓圈中最後剩下的數)/簡單約瑟夫環
1.數學遞推,遞迴,時間複雜度O(n) 結論: 分析: 下面用數學公式推導的方法,解決約瑟夫環經典問題。 第一步,這n個人我們給每一個人一個編號 0 ,1 ,2 ······ n-2,n-1 第二步,當第一輪遊戲結束後,這n個人少就變成了n-1個人 第三步,將第一輪結束後
資料結構——簡單約瑟夫環
約瑟夫環問題 問題描述:約瑟夫環問題是,編號為1,2,3,…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼。開始時任選一個正整數作為報數上限值m,從第一個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一
約瑟夫環問題(動態連結串列操作)n個學生圍成一圈,每m個出隊,輸出所有出隊的序列
需求:掌握連結串列的簡單操作(增刪查改)詳解在備註中指出 #include <iostream> #include <stdlib.h> #include <stdio.h> /* run this program using the
約瑟夫環問題(迴圈連結串列實現)
約瑟夫環問題,n個人圍成一圈,報數到m的人出列,直至n個人全部出列,問出列人的順序 手寫迴圈連結串列模擬實現 #include<stdio.h> #include<stdlib.h> typedef struct SingleNode {
約瑟夫環問題(二):(難度:2顆星)
問題描述: 編號為1,2,…,n的n個人按順時針方向圍坐一圈,任選一個正整數作為報數上限m,從第一個人開始按順時針方向從自1開始順序報數,報道m時停止報數.報m的人出列,從他的順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止,輸出最後一個出列的人的編號。 輸入
約瑟夫環問題(一)(難度:1顆星)
問題描述: 編號為1,2,…,n的n個人按順時針方向圍坐一圈,任選一個正整數作為報數上限m,從第一個人開始按順時針方向從自1開始順序報數,報道m時停止報數.報m的人出列,從他的順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止,設計一個程式求出出列順序. 輸入輸
使用順序表求解約瑟夫環問題 (自定義順序表)
約瑟夫環(Josephus)問題:古代某法官要判決n個犯人的死刑,他有一條荒唐的法律,將犯人站成一個圓圈,從第s個人開始數起,每數到第d個犯人,就拉出來處決,然後再數d個,數到的人再處決……直到剩下的最後一個可赦免。當n=5,s=1,d=2,時: 第一步:定義一個順序表Se
約瑟夫環問題(迴圈連結串列)
這是一道比較經典的迴圈連結串列問題,在華為上機筆試中也出現過。 約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直
約瑟夫環-順序表-C++
#include <iostream> using namespace std; template<class T> class SeqList { public: SeqList(int size=64); SeqList(T value[]
約瑟夫環問題(猴子選大王)PHP版
n) 構造 一個數 UNC turn 編號 來歷 while params 約瑟夫斯問題問題有時候也被描述成猴子選大王問題,題目如下。(最後會貼上約瑟夫問題的來歷) 一群猴子排成一圈,按1,2,…,n依次編號。 然後從第1只開始數,數到第m只,把它踢出圈,
樹形dp模板(C++版)
poj2342 最簡單的樹形dp入門,樹上的最大點權獨立集 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N=6e3
Prim模板(C++版)
hiho1097 Prim和Dijkstra很像,這裡也是用鄰接矩陣存的,應該也能改成堆優化的吧,然後就是鬆弛條件那裡和dijk不一樣 #include <bits/stdc++.h> using namespace std; const int N=1e3+50; co