第四周 專案四 猴子選大王

2021-08-09 12:45:00 字數 1192 閱讀 4561

/*       

* all right reserved.

* 檔名稱:main.cpp

* 完成日期:2023年10月19日

* 版本號:v1.0

*

* 問題描述:猴子選大王

* 輸入描述:猴子數m和數到的數n

* 程式輸出:最後的大王編號

*/

一群猴子,編號是1,2,3 …m,這群猴子(m個)按照1-m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子為大王。輸入m和n,輸出為大王的猴子是幾號。

1)鍊錶解法:可以用乙個迴圈單鏈表來表示這一群猴子。表示結點的結構體中有兩個成員:乙個儲存猴子的編號,乙個為指向下乙個人的指標,編號為m的結點再指向編號為1的結點,以此構成環形的鏈。當數到第n個時,該結點被刪除,繼續數,直到只有乙個結點。 

(2)使用結構陣列來表示迴圈鏈:結構體中設乙個成員表示對應的猴子是否已經被淘汰。從第乙個人未被淘汰的數起,每數到n時,將結構中的標記改為0,表示這只猴子已被淘汰。當數到陣列中第m個元素後,重新從第乙個數起,這樣迴圈計數直到有m-1被淘汰。 

**如下:

#include using namespace std;

struct monkey

;

int main()

else

p2->next=head; //最後乙隻再指向第一只,成了乙個圓圈

//下面要開始數了

p1=head;

for(i=1; inext; //圍成圈的,可能再開始從第一隻數,如果還未被淘汰的話

//找到了,

p2=p1->next; //p2將被刪除

//cout<<"第"next; //p2就這樣被「架空了」

p1=p2->next; //下一輪數數的新起點

delete p2; //將不在鍊錶中的結點放棄掉

} king=p1->num;

delete p1;

} cout<

該程式其實就是約瑟夫問題。將抽象的問題放到模型中,可以更好地理解。

熟練掌握鍊錶掌握此類問題。

第四周 專案四 猴子選大王

計算機控制工程學院 姓名 陳飛 班級 計156 2 問題及 問題描述 一群猴子,編號是1,2,3 m,這群猴子 m個 按照1 m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子為大王。輸入m和n,輸出為大王的猴子是幾號。includ...

第四周專案四 猴子選大王

問題及 煙台大學計算機與控制工程學院 作 者 申鵬鵬 完成日期 2016年9月24日 問題描述 一群猴子,編號是1,2,3 m,這群猴子 m個 按照1 m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子為大王。輸入m和n,輸出為大王...

第四周專案四 猴子選大王

all right reserved.檔名稱 axiao.cpp 完成日期 2017年10月8日 版本號 v1.0 問題描述 猴子選大王 輸入描述 猴子總數m只,要離開的猴子第n只 程式輸出 成為大王的猴子的編號 一群猴子,編號是1,2,3 m,這群猴子 m個 按照1 m的順序圍坐一圈。從第1只開始...