智力数学题:猴子分桃

题目:

老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。
第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。
第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。
后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。
这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老猴子最少能得到几个桃子。

思路:

每次小猴子分桃的时候平均分成五堆,总会剩下一个给老猴子。老猴子最终会得到每个小猴子给他的一个桃子和最后一个猴子分完的4堆桃子。

倘若我们假设一共有x个桃子

第一只猴子拿走(x-1)/5个桃子后,剩余(x-1)*(4/5);

第二只猴子拿走(x-1)*(4/5)-1)/5之后,剩余  ((x-1)*(4/5)-1)*(4/5)

............

由于每次我要拿走一个桃子,式子-1之后没有规律。

所以,我们在假设多4个桃子,即现在有y(y=x+4,可被5整除)个桃子

第一个小猴子拿走之后剩余 y*(4/5)个桃子

第二个小猴子拿走之后剩余y*(4/5)^2个桃子

。。。。。。

第n个小猴子拿走之后剩余y*(4/5)^n个桃子

小疑惑:老猴子每次的那个桃子呢?由于分成五份,而我们多给了4个,我们可以认为小猴子每次拿走了给老猴子的那一个;

到最后呢?第n个小猴子拿走了剩下y*(4/5)^n个桃子,其中还有四个桃子是我们多给的,因此拿走4个即y*(4/5)^n-4个是所有小猴子拿完之后剩余归老猴子所有的部分;

而小猴子每次还拿走了属于老猴子的一个,所以每个小猴子还要给老猴子一个,故老猴子可得y*(4/5)^n-4+n个桃子.

每次分桃子都是平均分,不可能出现半个桃子之类的情况,又因为(4^n)/(5^n)肯定不为整数所以 y一定为5^n的整数倍。

求开始时最少有多少个桃子   即y=5^n      x+4=5^n        x=5^n-4;

那老猴子最少可得的桃子数量为 4^n-4+n

代码实现:

 

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
cout<<"小猴子数量"<<endl;
int n;
cin>>n;
cout<<"开始至少有"<<(long long )(pow(5^n)-4)<<"个桃子"<<endl;
cout<<"老猴子至少得到"<<(long long )(pow(4^n)-4-n)<<"个桃子"<<endl;


return 0;
}

 

注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊!

如果需要练习的小伙伴,可以打开下方链接

链接:https://www.nowcoder.com/questionTerminal/480d2b484e1f43af8ea8434770811b4a
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值