約瑟夫環問題(迴圈連結串列實現C)
約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
以下是程式碼實現(c語言)
#include<stdio.h> #include<stdlib.h> typedef struct node{ int date; struct node *next; }node,*linklist; linklist creat(int n) { linklist p=NULL,head; head=(linklist)malloc(sizeof(node));//建立頭結點 p=head;//p為指向當前節點的指標 linklist s; int i=1; if(n!=0) { while(i<=n) { s=(linklist)malloc(sizeof(node)); s->date=i++; p->next=s; p=s; } s->next=head->next;//首尾相連,頭結點可以直接刪掉,指向的是head->next,而不是head因為頭結點裡沒有資料 } free(head); return s->next; } int main() { int n=41; int m=3; int i; linklist p=creat(n); linklist temp; m%=n; while(p!=p->next) { for(i=1;i<m-1;i++) { p=p->next; } printf("%d->",p->next->date); temp=p->next; p->next=temp->next;//連線2,4結點, 一般要刪除一個結點的時候一定要注意最後要接上去 free(temp); p=p->next; } printf("%d\n",p->date); return 0; system("pause"); }
相關推薦
資料結構——約瑟夫環(迴圈連結串列)
n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 提示:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。 樣例: 輸入: 10 3 1 //分別為總數,出列的人數到的數字,開始數的人的編號。 輸出:
約瑟夫環 單向迴圈連結串列實現
約瑟夫環 已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 ///迴圈連結串列實現 #include<bits/stdc++.h>
約瑟夫環問題迴圈連結串列實現
//n個人圍圈報數,報m出列,模擬出列的過程 #include <cstdio> #include <cstdlib> typedef struct node { int data; struct node *next; }node; nod
約瑟夫環問題(迴圈連結串列實現C)
約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 以下是程式碼實現(c語
約瑟夫環---單向迴圈連結串列
題目:實現一個圍圈報數的小函式,7個人圍一圈,從第1個人開始報數,報道3的人結束遊戲,計算出最後剩下一個人的時候,他是第幾個人。 程式碼: 預設從第一個人開始報數 #include<iost
C_線性表----約瑟夫環問題(迴圈連結串列)
已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部
約瑟夫環——靜態迴圈連結串列,動態迴圈連結串列
靜態迴圈連結串列 struct node{ int flag; int next; }arr[11]; #include"stdio.h" #include"stdlib.h" #include"s.h" main(){ int
約瑟夫環問題的連結串列實現
據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3
BIT2018 DS-SS 約瑟夫問題與迴圈連結串列
約瑟夫問題是一個經典的問題(大一我們講過)。這個問題可以用陣列,也可以用連結串列。作為複習,大家可以試試你自己的演算法。 已知n個人(不妨分別以編號1,2,3,…,n 代表 )圍坐在一張圓桌周圍,從編號為 k 的人開始,從1開始順時針報數1, 2, 3, ...,順時針數到
約瑟夫環遊戲->連結串列和順序表實現
#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; typedef struct Staff { int number; struct Staff
約瑟夫問題(單向迴圈連結串列應用例項)
據說著名猶太曆史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後
約瑟夫環(使用C語言單向迴圈連結串列來解決)
題目描述 編號為1,2,…,n的n個人按順時針方向圍坐在一張圓桌周圍,每人持有一個密碼(正整數)。一 開始任選一個正整數m作為報數上限值,從第一個人開始按順時針方向自1開始報數,報到m時停止報數,報m的那 個人出列,將他的密碼作為新的m值,從他順時針方向的下一個人開始重新從1報數,
約瑟夫環問題(迴圈連結串列實現)
約瑟夫環問題,n個人圍成一圈,報數到m的人出列,直至n個人全部出列,問出列人的順序 手寫迴圈連結串列模擬實現 #include<stdio.h> #include<stdlib.h> typedef struct SingleNode {
約瑟夫環(Josephus)迴圈連結串列解決
關於約瑟夫環的簡單思路技巧 題目要求: 分析題目: 設編號為1,2,3,4…n的n個人順時針坐一圈,約定編號為K的人按順時針從1開始報數,數到m的人出列,他的下一位從1開始 報數… 預設第一次輸入剛開始的序號,之後選擇到誰就用誰的密碼,並把它刪掉。 思路分析:正
約瑟夫環(連結串列法,公式法)
約瑟夫環作為一個數學問題,它的程式碼實現方式有很多,比如迴圈連結串列,公式解決或者動態規劃,之前參考資料也有用遞迴解決的。Anyway,這些都是解決約瑟夫環問題很有效的方法。這裡總結兩種方法,迴圈連結串列法和公式法。 首先是迴圈連結串列法,它的原理很簡單,也很容
約瑟夫環(線性寫法)
1073 約瑟夫環 1 秒 131,072 KB 0 分 基礎題 N個人坐成一個圓環(編號為1 - N),從第1個人開始報數,數到K的人出列,後面的人重新從1開始報數。問最後剩下的人的編號。 例如:N
約瑟夫環(猴子選大王問題)
資料結構與演算法之約瑟夫環。 與其枯燥的講解約瑟夫環,倒不如用約瑟夫環來解決一個有趣的問題。 猴子選大王問題: 現在有N個猴子需要選取一個猴王,這N個猴子手拉手圍成一個圈,旁邊有一位德高望重的老猴,先將這一圈猴按順時針方向編號1,2.......N,然後
51Nod1073 約瑟夫環 (遞推公式)
#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #
順序表之約瑟夫環(josephus)
1.問題描述 n個犯人站成一個圈,從第s個人開始數起,每數到第d個犯人,就拉出來斬了,然後再從下一個開始數d個,數到的人再處決,………………,直到剩下最後一個犯人就予以赦免。 2.演
華為筆試題目--約瑟夫環(Joseph)修改版
測試空間旗下大頭針出品 這個可是已經執行通過了的。大家可以看看,如果有什麼問題,及時交流。 #include<stdio.h>#include<stdlib.h>typedef struct Node *PNode; struct Node { int num;