// 一堆猴子有m個,編號分別是1,2,3 ...m,這m個猴子按照編號1,2,…,m的順序圍坐一圈,然後從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子就為大王。
//要求:分別採用向量及鍊錶兩種儲存方式實現該問題的求解,給出一組m和n,輸出對應的猴王。
#include
#include
#include
int main
(void);
struct list *houzi;
int m, n, a;
a =1;
//a用來計數
printf
("輸入猴子的個數m=");
scanf
("%d"
,&m)
;printf
("輸入數到第n只猴子出局,n=");
scanf
("%d"
,&n)
; houzi =
(struct list *
)malloc
(sizeof
(struct list));
struct list *head;
struct list *current;
struct list *now;
now =
(struct list *
)malloc
(sizeof
(struct list));
head = houzi;
houzi-
>name =1;
//第一只猴子分開初始化
houzi-
>next=now;
houzi = houzi-
>next;
for(int i =
1; i < m -
1; i++
)//初始化所有的猴子編號
houzi-
>name = m;
//最後乙隻猴子初始化,並把最後和頭連起來,構成乙個環
houzi-
>next = head;
houzi = head;
while
(m >1)
a =1;
current = houzi-
>next;
houzi-
>next = houzi-
>next-
>next;
current =
null
; houzi = houzi-
>next;
m = m -1;
}printf
("%d"
, houzi-
>name)
;}
約瑟夫問題(猴子選王)c語言鍊錶與陣列的實現
1.約瑟夫問題 設編號為1,2,m的m個人圍坐一圈,從1開始報數,數到n 的那個人出列,它的下一位又從1開始報數,數到n的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。1 2 3 4 5 6 7 8 第1 次出列 6 a 5 0 total 1 1 2 3 4 5 7 8 ...
C語言程式設計 猴子選大王 鍊錶應用
description 有n只猴子,從1 n進行編號。它們按照編號的順時針方向排成乙個圓圈,然後從第一只猴子開始報數。第一只猴子報的第乙個數字為1,以後每只猴子報的數字都是它們前面猴子所報數字加1。如果乙個猴子報的數字是m,則該猴子出列,下乙個猴子重新從1開始報數,直到所有猴子都出列為止,最後乙個出...
猴子選大王(陣列 鍊錶實現)
已知,有n只猴子,圍繞成一圈,從第1只猴子開始報數1,第2只猴子報數2,以此類推,報數到m時,該猴子退出圈外。從下乙隻猴子開始,重新開始報數,每次報數到m時都會淘汰乙隻猴子,最後剩下的猴子為大王。請問,猴子大王的一開始的序號是多少?首先這道題乍一看似乎如果用陣列做,陣列的下標會比較難處理,但我們可以...