演算法實驗題 猴子分桃問題

2021-06-21 06:15:16 字數 1136 閱讀 7075

問題描述:動物園裡的n只猴子編號為1,2,......n,依次排成一隊等待飼養員按規則分桃。動物園的分桃規則是每只猴子可分得m個桃子,但必須排隊領取。飼養員迴圈的每次取出1個,2個,3個.....k個桃子放入筐中,由排在隊首的猴子領取。取到筐中的桃子數為k後,又重新從1開始。當筐中桃子數加上隊首猴子已經取得的桃子數不超過m時,隊首的猴子可以全部取出筐中桃子。取得的桃子總數不足m個的猴子,繼續到隊尾排隊等候。當筐中桃子數加上隊首猴子已經取得的桃子數超過m時,隊首的猴子只能取滿m個,然後離開佇列,筐中剩餘的桃子由下乙隻猴子取出。上述分桃過程一直進行到每只猴子都分到m個桃子

實驗任務:對於給定的n,k,m模擬上述猴子分桃過程。

資料輸入:n,k,m分別表示猴子數,每次最多取k個桃子到筐中,每只猴子最終都分到m個桃子。

輸出結果:將分桃過程中每只猴子離開佇列的次序依次輸出。

解題思想:可以用佇列的性質模擬這個過程,本程式使用的是c++中的stl,可以直接使用佇列而不必進行複雜的定義等等。首先對佇列中的猴子進行編號。然後建立乙個陣列儲存對應的猴子取得的桃子數,並初始化為0,每次模擬取桃子這個過程,直到佇列中的猴子數為0,則表明所有的猴子都取到了m個桃子。詳細見**:

c++**:

#include#include//使用stl的queue,方便操作

using namespace std;

int a[100];

int bz[100];

int main()

cout<

else

if(t==1) //本次本來應該投放1個桃子,但原本就有剩餘,所以留到下次放

t=k;

else t=t-1; //後面有執行t++,所以這裡t=t-1,則下次還是為t

}//框中沒有剩餘時

else

else}//

if(t==k)//當分完k個時,下次繼續從1開始分

t=1;

else t++;

} cout<

演算法 猴子分桃問題

問題描述 海灘上有一堆桃子,五隻猴子來分。第1只猴子把這堆桃子平均分為五份,多了乙個,這只猴子把多的乙個吃掉,拿走了乙份。第二隻猴子把剩下的桃子又平均分為五份,又多了乙個,它同樣把多的乙個吃掉,拿走了乙份,第3 第4 第5只猴子都是這樣做的。問海灘上原來最少有多少個桃子。演算法分析 假設海灘上原來有...

演算法 猴子分桃

1.問題 五隻猴子分桃。半夜,第一只猴子先起來,它把桃分成了相等的五堆,多出乙隻。於是,它吃掉了乙個,拿走了一堆 第二隻猴子起來一看,只有四堆桃。於是把四堆合在一起,分成相等的五堆,又多出乙個。於是,它也吃掉了乙個,拿走了一堆 其他幾隻猴子也都是 這樣分的。問 這堆桃至少有多少個?2.解決思路 可以...

猴子分桃問題

五隻猴子分桃。半夜,第一只猴子先起來,它把桃分成了相等的五堆,多出乙隻。於是,它吃掉了乙個,拿走了一堆 第二隻猴子起來一看,只有四堆桃。於是把四堆合在一起,分成相等的五堆,又多出乙個。於是,它也吃掉了乙個,拿走了一堆 其他幾隻猴子也都是 這樣分的。問 這堆桃至少有多少個?設桃子總數為s,第一只猴子分...