算法----猴子分蘋果

算法訓練猴子分蘋果 

時間限制: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。。。

歡迎大神們指正!!!


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章