五猴分桃问题

这里有一大堆桃子。这是5个猴子的公共财产。它们要平均分配。第一只猴子来了。它左等右等,别的猴子都不来,便动手把桃子均分成5堆,还剩了1个。它觉得自己辛苦了,当之无愧地把这1个无法分配的桃子吃掉,又拿走了5堆中的1堆。第二只猴子来了。它不知道刚才发生的情况,又把桃子均分成5堆,可还是多了1个。它吃了这1个,拿1堆走了。以后,每个猴子来了,都是如此办理。请你写一段python程序,计算原来至少有多少桃子?并且猴子的数量设为控制台输入。
我写的程序如下:

import time

def calculate_peach(monkey_num):

        x = 1

        while True:

                count = x * monkey_num + 1

                for _ in range(monkey_num - 1):

                        if count % (monkey_num - 1) == 0:

                                count = (count // (monkey_num - 1)) * monkey_num + 1

                        else:

                                count = 0

                                break

                if count != 0:

                        return count

                x += 1

# 主程序

monkey_num = int(input("请输入猴子的数量:"))

start_time = time.time()

peach = calculate_peach(monkey_num)

end_time = time.time()

print("海滩上原来最少有%d个桃子" % peach)

total_time = end_time - start_time

print("程序运行时长:", total_time)

通过测试,发现如何猴子数量达到10个,需要很长时间才能给出计算结果。大家有没有能提高运算效率的算法,欢迎分享一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值