五猴分桃

题目

有五个猴子,分一堆桃子;第一个猴子过来把桃分了5份,多出一个桃,它拿走了其中一份和多出来的一个桃;第二个猴子把剩下的桃再分了5份,也多出了一个桃,它像第一个猴子那样拿走了其中一份和多出来的一个桃;后面3个猴子也遇到了第一和第二个猴子的情况,也做出了同样的选择;请问至少有多少个桃?

解题

这里我们不知道最后一个猴子分桃时平均每个猴子能分多少个桃,有人可能会认为“至少”当然是1个桃啦,这是不对的,因为如果是这样的话,那第4个猴子分给4个猴子时总共分了1 * 5 + 1 = 6个桃,6不是4的倍数,所以不能这么想当然。
从题目来看,桃子总数必然是5的倍数,再加1,所以桃子数可以从6开始,如果桃子数不满足目题的要求,则加5,不断地重复该过程,直到桃子数满足题目要求。

伪代码:

x = 6
while 不满足题目要求:
	x += 5

代码

python

def get_peaches(monkeys):
	# 初始化桃子数
	peaches = monkeys + 1
	# 判断桃子是否够分
	while not is_dividable(peaches, monkeys):
    	# 递增
    	peaches += monkeys
	return peaches

def is_dividable(peaches, monkeys):
	for _ in range(monkeys):
    	peaches -= 1
    	if peaches % monkeys != 0:
        	return False
    	peaches = (peaches // monkeys) * (monkeys - 1)
	return True
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值