time limit: 1000 ms memory limit: 65536 kib
problem description
老猴子辛苦了一輩子,給那群小猴子們留下了一筆巨大的財富——一大堆桃子。老猴子決定把這些桃子分給小猴子。
第乙個猴子來了,它把桃子分成五堆,五堆一樣多,但還多出乙個。它把剩下的乙個留給老猴子,自己拿走其中的一堆。
第二個猴子來了,它把桃子分成五堆,五堆一樣多,但又多出乙個。它把多出的乙個留給老猴子,自己拿走其中的一堆。
後來的小猴子都如此照辦。最後剩下的桃子全部留給老猴子。
這裡有n只小猴子,請你寫個程式計算一下在開始時至少有多少個桃子,以及最後老猴子最少能得到幾個桃子。
input
輸入包括多組測試資料。
每組測試資料報括乙個整數n(1≤n≤10)。
輸入以0結束,該行不做處理。
output
每組測試資料對應一行輸出。
包括兩個整數a,b。
分別代表開始時最小需要的桃子數,和結束後老猴子最少能得到的桃子數。
sample input
5 1
0sample output
3121 1025
1 1
#include
using
namespace
std;
int main()
}sum=n+arr[n]/5*4;
cout
<< arr[1] << ' '
<< sum << ' '
<< arr[n]0;
我們首先要保證最後乙個猴子分桃的時候能分配到,我們再去保證前面的猴子分桃能分到。
其次,你要明白乙個概念,到低是誰推誰,這種邏輯不能亂。
1.我們要保證[x]*5/4+1=[x-1],且[x-1]%5==1
那麼必須保證[x]
是4的倍數,即前面一定是4的倍數才能達到這種效果。
2.其次,我們要保證最後乙個一定可以分配,分配的結果我們不用管,只要保證[x-1]%5==1
,所以,如果是這樣的話,x=1,6,11,····(+5)
好,現在我們來理清一下思路,我們需要填充好x[i]的,我們先判斷其上乙個x[i+1]是否符合遞推條件,如果符合,則對x[i]填充;否則,則不填充。
一旦選擇不填充,那麼說明我們開始的數字不符合要求,我們要對其繼續增加直到全部符合相關標準為止。
要用嚴格的數學思維來解題,不能光靠直覺來得出所以然,也不能光靠帶數來嘗試,要靠嚴格的數學證明和嚴謹的邏輯!
SDUT 1232 猴子分桃 逆推
time limit 1000ms memory limit 65536k 有疑問?點這裡 老猴子辛苦了一輩子,給那群小猴子們留下了一筆巨大的財富 一大堆桃子。老猴子決定把這些桃子分給小猴子。第乙個猴子來了,它把桃子分成五堆,五堆一樣多,但還多出乙個。它把剩下的乙個留給老猴子,自己拿走其中的一堆。第...
SDUT 猴子分桃
problem description 老猴子辛苦了一輩子,給那群小猴子們留下了一筆巨大的財富 一大堆桃子。老猴子決定把這些桃子分給小猴子。第乙個猴子來了,它把桃子分成五堆,五堆一樣多,但還多出乙個。它把剩下的乙個留給老猴子,自己拿走其中的一堆。第二個猴子來了,它把桃子分成五堆,五堆一樣多,但又多出...
猴子分桃問題
五隻猴子分桃。半夜,第一只猴子先起來,它把桃分成了相等的五堆,多出乙隻。於是,它吃掉了乙個,拿走了一堆 第二隻猴子起來一看,只有四堆桃。於是把四堆合在一起,分成相等的五堆,又多出乙個。於是,它也吃掉了乙個,拿走了一堆 其他幾隻猴子也都是 這樣分的。問 這堆桃至少有多少個?設桃子總數為s,第一只猴子分...