python_N猴子偷桃

#!/usr/bin/python
# coding=utf-8
# __author__ = 'cy'
# 输入猴子数量
# monkey = str(input("Input monkey num:"))
monkey = 4


# 定义桃子总数函数
def show(n):
    for i in range(1, monkey + 1):
        # 当前猴子应该带走的桃子数
        t = (n - 1) / monkey
        # 格式化输出
        print('%d. 桃子有%d个, 第%i只猴吃1个, 拿走%s个。' % (i, n, i, int(t)))
        
        n = (monkey - 1) * t  # 前一只猴子带走一份桃子后,剩余的桃子总数
        # n=t # 上一个猴子拿的桃子数量,不代表剩余的桃子数量


# 定义功能函数
def fun():
    # 从1开始
    k = 1
    while True:
        t = k
        # 循环次数
        for i in range(monkey - 1):
            # 当前猴子应拿走桃子数为tc,吃之前总量应为 monkey * tc + 1,
            # 前一个猴子拿走桃子数为tp,则剩下桃子数为 (monkey-1) * tp = monkey * tc + 1
            t = monkey * t + 1
            if t % (monkey - 1): break
            t /= (monkey - 1)
        # 位于else的子句将执行,即找到符合条件最小整数
        else:
            print('如果猴子%d只:' % monkey)
            print('桃子总数要%d个:' % (monkey * t + 1))
            show(monkey * t + 1)
            break
        k += 1


fun()


Q&A

  • t = monkey * t + 1 代表第n只猴子在吃拿前桃子的总数
  • t % (monkey - 1)代表第n-1只猴子吃拿后,剩余的桃子数,判断 当前t 是否满足条件t !=0–>t不满足条件,则跳出循环,尝试下一个k
  • t /= (monkey - 1) :t满足条件,往下查看是否满足序号2 条件
  • print(‘桃子总数要%d个:’ % (monkey * t + 1)) 能否把变量替换成t?
  • fun() 函数实现什么功能?
    答:不断测试t是否可以整除monkey-1,然后得出最小的t
    疑问?? 要是t 一直都不满足条件咋整
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值