和之前說的猴子選大王一樣,一共n個人報數,報道m的人出列,之後繼續從1開始報數,直到最後就剩乙個人
之前說了一下陣列的實現方法,其實還有很多實現的方法,這裡說一下鍊錶剔除的方法以及c++佇列函式的實現方法
先說鍊錶實現吧
#include#include#define len sizeof(struct monkey)
struct monkey
;struct monkey*creat(int n)
p2->next=head;/*最後乙個猴子的下乙個又是第乙個猴子,圍成乙個環*/
return head;
}struct monkey *cut(struct monkey*head,int n)
p1=head;
while(n>1)
else
}printf("%d",p1->num);
free(p1);
}int main()
下面說一下佇列實現吧,這裡先給大家介紹一下c++的佇列函式
queuex 定義乙個名字為x的佇列
x.front() 這個佇列的第乙個元素
x.pop()刪除隊首元素
x.pop(*) 往佇列最後插入元素(*代表元素)
下面給出**
#include#include#includeusing namespace std;
#includeint main()
{ int m,n;
int i;
while(scanf("%d%d",&n,&m)!=eof)
{queuemonkey;/*定義在內部每次初始化*/
for(i=0;i1)
{for(i=1;i
鍊錶實現約瑟夫環問題
約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從1開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌剩下最後乙個人,求那個人的位置。總體思路 1 建立鍊錶 用尾插法建立 2 當人數大於...
迴圈鍊錶實現約瑟夫問題
高階約瑟夫問題 總結 初學資料結構的迴圈鍊錶,正好利用迴圈鍊錶可以很容易的解決上述問題。include include include typedef int elemtype define len sizeof node define n 41 總人數 41 define m 3 密碼固定為3 t...
佇列實現約瑟夫問題
描述約瑟夫問題 有 只猴子,按順時針方向圍成一圈選大王 編號從 到 從第 號開始報數,一直數到 數到 的猴子退出圈外,剩下的猴子再接著從1開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王,程式設計求輸入 後,輸出最後猴王的編號。輸入 每行是用空格分開的兩個整數,第乙個是 n,第二個是 m...