問題描述:動物園裡的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,第一只猴子分...