猴子分桃问题

猴子分桃问题

笔试的时候碰到一道题, 死活不得其解, 后来看了知乎的一个解答才茅塞顿开;

问题描述:

有未知数量香蕉一堆, 有m只猴子, 第一只猴子来了之后, 把香蕉分为5堆, 刚好多1个, 于是它吃掉1个, 拿走其中一堆; 第二只猴子来了之后, 同样把香蕉分5堆, 刚好多一个, 于是它吃掉1个, 拿走其中一堆; 剩余猴子依次到来, 做同样的操作; 问这堆香蕉至少有多少个?

方案1

暴力解: 设置香蕉初始值为1, 看是否满足同样的m次操作; 由于m可能非常大, 通常会超时;

方案2

分析数学解: 因为每个猴子都将香蕉分为5堆+1个, 那么, 如果我们给它们借4个香蕉, 会发生什么呢?
香蕉变为了5堆+5个, 那么一分为5, 就是1堆+1个, 此时猴子每次拿走的香蕉数量不变, 但是每次都能够刚好被5整除.
这样的话, 就有了这样的关系, n+4至少能被5整除m次:
n + 4 = 5 k ; k > = m ; n+4 = 5^k; k>=m; n+4=5k;k>=m;
n 最小为 5 m − 4 5^m-4 5m4;
m = 1时, n = 5-4=1
m = 2时, n =25-4=1
m = 3时, n=125-4=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值