演算法訓練 猴子分蘋果

2021-07-10 02:12:10 字數 1042 閱讀 3311

問題描述

秋天到了,n只猴子採摘了一大堆蘋果放到山洞裡,約定第二天平分。這些猴子很崇拜猴王孫悟空,所以都想給他留一些蘋果。第一只猴子悄悄來到山洞,把蘋果平均分成n份,把剩下的m個蘋果吃了,然後藏起來乙份,最後把剩下的蘋果重新合在一起。這些猴子依次悄悄來到山洞,都做同樣的操作,恰好每次都剩下了m個蘋果。第二天,這些猴子來到山洞,把剩下的蘋果分成n分,巧了,還是剩下了m個。問,原來這些猴子至少採了多少個蘋果。

輸入格式

兩個整數,n m

輸出格式

乙個整數,表示原來蘋果的數目

樣例輸入

5 1樣例輸出

15621

資料規模和約定

0此題類似李政道教授的那道猴子分桃算術題,用巧解的方法果然高效美妙。

可設蘋果總數為x, 往總數裡加(n-1)*m個蘋果使y = x + (n-1)*m;

第一只猴子吃m個蘋果再藏(x-m)*(1/n)個,即第一只猴子共拿了y*(1/n)個蘋果,蘋果剩(n-1)/n * y,

......可以依此類推,最後蘋果剩n*乙個整數再加m個。(自己動手動腦豐衣足食 :) , 可以假設加乙隻猴子)

得出公式: x  =  (n ^ n+1) - ((n - 1) * m)

#include int main()

sum = p - ((n - 1 ) * m);

printf("%d", sum);

return 0;

}

但由於oj第乙個測試資料出錯,第二天猴子們把蘋果分成n份時,乙份至少1個,所以本題題解不是百分之百正確。

更正後公式應為: x = k(n ^ n+1) - ((n - 1) * m) 

更正後題解

#include int main()

o /= (n-1);

while(o < m+1)

sum = p - ((n - 1 ) * m);

printf("%d", sum);

return 0;

}

演算法訓練 猴子分蘋果

問題描述 秋天到了,n只猴子採摘了一大堆蘋果放到山洞裡,約定第二天平分。這些猴子很崇拜猴王孫悟空,所以都想給他留一些蘋果。第一只猴子悄悄來到山洞,把蘋果平均分成n份,把剩下的m個蘋果吃了,然後藏起來乙份,最後把剩下的蘋果重新合在一起。這些猴子依次悄悄來到山洞,都做同樣的操作,恰好每次都剩下了m個蘋果...

演算法訓練 猴子分蘋果

問題描述 秋天到了,n只猴子採摘了一大堆蘋果放到山洞裡,約定第二天平分。這些猴子很崇拜猴王孫悟空,所以都想給他留一些蘋果。第一只猴子悄悄來到山洞,把蘋果平均分成n份,把剩下的m個蘋果吃了,然後藏起來乙份,最後把剩下的蘋果重新合在一起。這些猴子依次悄悄來到山洞,都做同樣的操作,恰好每次都剩下了m個蘋果...

演算法訓練 猴子分蘋果

問題描述 秋天到了,n只猴子採摘了一大堆蘋果放到山洞裡,約定第二天平分。這些猴子很崇拜猴王孫悟空,所以都想給他留一些蘋果。第一只猴子悄悄來到山洞,把蘋果平均分成n份,把剩下的m個蘋果吃了,然後藏起來乙份,最後把剩下的蘋果重新合在一起。這些猴子依次悄悄來到山洞,都做同樣的操作,恰好每次都剩下了m個蘋果...