• python百炼成钢实例080猴子分桃


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

    程序解析:

    假设最后一只猴子拿走后还剩下sum_peach 4N,拿桃子前5N+1, 则 sum_peach = sum_peach/4 *5 +1

    那再上一只猴子拿走后还剩下sum_peach 也是 4N,拿桃子前是 sum_peach = sum_peach/4 *5 +1
     依次累积到第一只猴子拿,也是sum_peach 也是 4N,拿桃子前是 sum_peach = sum_peach/4 *5 +1
    隐藏条件是N为整数,sum_peach/4 *5 +1 能被4整除

    程序:

    """"
    海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,
    这只猴子把多的一个扔入海中,拿走了一份。
    第二只猴子把剩下的桃子又平均分成五份,又多了一个,
    它同样把多的一个扔入海中,拿走了一份,
    第三、第四、第五只猴子都是这样做的,
    问海滩上原来最少有多少个桃子?
    """
    # 假设最后一只猴子拿走后还剩下sum_peach  4N,拿桃子前5N+1, 则 sum_peach = sum_peach/4  *5  +1
    # 那再上一只猴子拿走后还剩下sum_peach 也是 4N,拿桃子前是  sum_peach = sum_peach/4  *5  +1
    # 依次累积到第一只猴子拿,也是sum_peach 也是 4N,拿桃子前是  sum_peach = sum_peach/4  *5  +1
    # 隐藏条件是N为整数,sum_peach/4  *5  +1 能被4整除
    
    num_monkey = 0 # 倒数第几个猴子
    last_num_peach = 1 # 最后分的桃子个数,假设为1个
    sum_peach = 0 # 桃子个数
    
    # while循环,直到累计到5只猴子,结束循环,否则一直循环,直到for循环累计到五只猴子
    # for 累计五只猴子,j变化,每次丢桃子前x都是4的倍数,则上一次桃子有 x/4 *5 +1
    
    while num_monkey<6:
        sum_peach = 4 * last_num_peach  # 最后一只猴子拿走后还剩下的桃子
        for num_monkey in range(1,6):
            if(sum_peach%4 !=0):
                break  # 不能被整除,说明假设的last_num_peach不成立,跳出for循环,while循环继续,last_num_peach往上继续累加推测
            else:
                num_monkey=num_monkey+1
            sum_peach = sum_peach/4 * 5 +1  #最后一只猴子拿走后还剩下sum_peach  4N,拿桃子前5N+1, 则 sum_peach = sum_peach/4  *5  +1
        last_num_peach = last_num_peach+1 #假设最后的桃子数不能被4整除了,则说明最后剩下的不为last_num_peach,则加1,直到所有sum_peach都能被4整除
    print(sum_peach)

     

  • 相关阅读:
    AutoCAD 相关的在线多级同步的一些资料收集 beta
    FUSLOGVW 工具来报告错误的具体信息
    [转]阿朱:帮助过我的那些书和人
    Accelerated C++ 习题答案
    一些帮助理解的短视频
    Visual Studio 控制台程序无法输出中文
    [翻译]ObjectArx.Net下Invoke非托管的函数
    LINQ&EF任我行(二)LinQ to Object (转)
    软件编程中的21条法则[转]
    VAssistX的VA Snippet Editor使用小讲 [转]
  • 原文地址:https://www.cnblogs.com/shishibuwan/p/15751776.html
Copyright © 2020-2023  润新知