算法訓練猴子分蘋果
時間限制:1.0s 內存限制:256.0MB
提交此題
問題描述
秋天到了,n只猴子採摘了一大堆蘋果放到山洞裏,約定第二天平分。這些猴子很崇拜猴王孫悟空,所以都想給他留一些蘋果。第一隻猴子悄悄來到山洞,把蘋果平均分成n份,把剩下的m個蘋果吃了,
然後藏起來一份,最後把剩下的蘋果重新合在一起。這些猴子依次悄悄來到山洞,都做同樣的操作,恰好每次都剩下了m個蘋果。第二天,這些猴子來到山洞,把剩下的蘋果分成n分,巧了,還是剩下了m個。
問,原來這些猴子至少採了多少個蘋果。
輸入格式
兩個整數,n m
輸出格式
一個整數,表示原來蘋果的數目
樣例輸入
5 1
樣例輸出
15621
數據規模和約定
0<m<n<9
分析:此題不能用正常的方法來做,首先我們設蘋果的總數爲X,我們向裏面添加(n-1)*m個蘋果,這時,蘋果能被每一個猴子均分。
第一個猴子分蘋果的總數:X 拿走 X+(N-1)*M /N 個蘋果
第二個猴子分蘋果的總數:(X+(N-1)*M)* (N-1) /N 拿走(X+(N-1)*M)(N-1)/N^2 個蘋果
第三個猴子分蘋果的總數:(X+(N-1)*M)* (N-1)^2 /N 拿走(X+(N-1)*M)(N-1) ^2/N^3 個蘋果
……………
最後一隻猴子拿走(X+(N-1)*M)(N-1)^(N-1)/N^N 此題最後還分配了一次
所以是 (X+(N-1)*M)(N-1) ^(N)/N^(N+1)
結果相除一定是一個常數,因爲 (N-1)^N與N^(N+1)是永遠也無法除成整數的,說明
X+(N-1)*M與N^(N+1)是能夠整除的。題目中說的是至少,這時我們不妨設他們整除的結果爲1,求解便得:X=N^(N+1) –(N-1)*M
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int sum = (int) Math.pow(n, n+1) - (n-1)*m;
System.out.println(sum);
}
}
總結:個人覺得此題不太嚴謹,最後一次也在分蘋果,且剩下了M個,說明分配了N+1次,應當看成N+1個猴子來求解,所以求解公式應該是X=N^(N+1) –N*M。。。
歡迎大神們指正!!!