python菜鸟教程-猴子分桃

80 猴子分桃

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

每次分五份儿多一个,每个人取走其中一份儿

i = 0
j = 1
x = 0
while(i<5):
    x = 4*j  #假设最后岸上还有4x个桃子
    for i in range(0,5):
        if(x%4 != 0):
            break
        else:
            i += 1
        x = (x/4) * 5 + 1
    j += 1
print(x)

3121.0

start,end,m1=0,100,0
while m1==0:
    end=end*2
    for i in range(start,end):
        m5=5*i+1
        if m5%4==0:
            m4=(m5/4)*5+1
            if m4%4==0:
                m3=(m4/4)*5+1
                if m3%4==0:
                    m2=(m3/4)*5+1
                    if m2%4==0:
                        m1=(m2/4)*5+1
                        break
    start=i
print("最少为:%d个桃子" % m1)

最少为:3121个桃子

递归函数

# coding:utf-8
# 猴子分桃,最少问题分析:问最少有多少只桃子,则岸上最后剩的桃子数目越小,则原岸上的桃子越少
# 假设最后岸上还剩4x只桃子,可以利用递归方法求解

num = int(input("输入猴子的数目:"))


def fn(n):
    if n == num:
        return (4 * x)  # 最后剩的桃子的数目
    else:
        return (fn(n + 1) * 5 / 4 + 1)


x = 1
while 1:
    count = 0
    for i in range(1, num):
        if fn(i) % 4 == 0:
            count = count + 1
    if count == num - 1:
        print("海滩上原来最少有%d个桃子" % int(fn(0)))
        break
    else:
        x = x + 1

输入猴子的数目:5

海滩上原来最少有3121个桃子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值