转载链接:https://blog.csdn.net/cy309173854/article/details/78296839

据说“五猴分桃”问题最先是由大物理学家狄拉克提出来的,这一貌似简单的问题曾困扰住了他,经过努力,他只是获得了相当繁琐的求解方法。为了获得简便的方法,他把问题提供给当时的一些数学家,有意思的是竟然也没有得到满意的结果。在后来者的不断努力下,比较简捷的方法才逐步涌现。 
李政道和杨振宁曾荣获诺贝尔物理学奖,正是由李政道提议成立了中科大少年班,他在中科大少年班的开班仪式上对“五猴分桃”问题进行适当演绎,提供给了少年班同学。

【五猴分桃】

话说花果山水帘洞有5只聪明的猴子,有一天它们得到了一堆桃子,他们发现那堆桃子不能被均匀分5份,于是猴子们决定先去睡觉,明天再讨论如何分配。夜深人静的时候,猴子A偷偷起来,吃掉了一个桃子后,它发现余下的桃子正好可以平均分成5份,于是它拿走了一份;接着猴子B也起来先偷吃了一个,结果它也发现余下的桃子恰好可以被平均分成5份,于是它也拿走了一份;后面的猴子C、D、E一次如法炮制,先偷吃一个,然后将余下的桃子平均分成5份并拿走了自己的一份,问:这一堆桃子至少有几个?

【解决思路】

设桃子总数为N,先借4个,总数则为N+4个,分成5份,每份相同。

经过第一步后,剩下4(N+4)/5

经过第二步后,剩下4^2(N+4)/5^2

经过第三步后,剩下4^3(N+4)/5^3

经过第四步后,剩下4^4(N+4)/5^4

经过第五步后,剩下4^5(N+4)/5^5

显然,4^5(N+4)/5^5 为整数,因为4^5和5^5互质,则:(N+4)肯定能被5^5整除。

所以,N=5^5×K-4,(K=1,2,3,......) 当K=1时,N为最小值,结果为5^5-4=3121

实际上只需要往桃堆添四个桃,就会发现,实际上每次猴子都是拿走桃堆的五分之一(包括它吃掉的),然后就是一个公比为5/4的等比数列。

【Python源码】

 #!/usr/bin/python
#coding=utf-8
# __author__ = 'cy'
#输入猴子数量
monkey = input("Input monkey num:")
#定义桃子总数函数
def show(n):
#循环次数
for i in xrange(1, monkey+1):
#下一只猴子应该带走的桃子数
t = (n - 1) / monkey
#格式化输出
print u'%d. 桃子有%d个, 第%i只猴吃1个, 拿走%s个。' % (i, n, i, t)
#前一只猴子带走一份桃子后剩余的桃子总数
n = (monkey-1) * t
#定义功能函数
def fun():
#从1开始
k = 1
while True:
t = k
#循环次数
for i in xrange(monkey-1):
#当前猴子应拿走桃子数为tc,吃拿之前总量应为 monkey * tc + 1,前一个猴子拿走桃子数为tp,则有 (monkey-1) * tp = monkey * tc + 1
t = monkey * t + 1
#在for循环中含有break时则直接终止循环,不执行else
if t % (monkey-1): break
t /= (monkey-1)
#当迭代的对象迭代完并为空时,位于else的子句将执行,即找到符合条件最小整数
else:
print u'如果猴子%d只:'% monkey
print u'桃子总数要%d个:'% (monkey * t + 1)
show(monkey * t + 1)
break
k += 1
fun()

用python实现【五猴分桃】问题的更多相关文章

  1. Java50道经典习题-程序41 猴子分桃

    题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...

  2. Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  3. 简学Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  4. Python进阶(五)----内置函数Ⅱ 和 闭包

    Python进阶(五)----内置函数Ⅱ 和 闭包 一丶内置函数Ⅱ ####内置函数#### 特别重要,反复练习 ###print() 打印输入 #sep 设定分隔符 # end 默认是换行可以打印到 ...

  5. JAVA 基础编程练习题41 【程序 41 猴子分桃】

    41 [程序 41 猴子分桃] 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把 多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了 ...

  6. java例题_41 利用递归给猴子分桃

    1 /*41 [程序 41 猴子分桃] 2 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把 3 多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均 ...

  7. Python(五)编程小实例

    Python(五)编程小实例 抓取网页信息,并生成txt文件内容! Python抓取网页技能--Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些 ...

  8. 初学Python(五)——元组

    初学Python(五)——元组 初学Python,主要整理一些学习到的知识点,这次是元组. #-*- coding:utf-8 -*- #定义元素 t = (1,2,3) #添加元素 #删除元素 #更 ...

  9. Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块

    Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数  linecache模块 目录 Pycharm使用技巧( ...

随机推荐

  1. python复习目录

    目录 一.计算机基础 二.python 2.1初始python 2.1 python基础1 2.2 python基础2 三.函数 3.1 函数进阶 3.2 函数之装饰器 3.3 递归函数之二分查找 3 ...

  2. 在thinkpad SL400上U盘安装双系统ubuntu14.10

    转自:http://zydky.iteye.com/blog/1674100 上文中装的双系统是centos6.3,因为自己对ubuntu有点熟悉,就装了ubuntu. 笔记本是09年入手的,买了之后 ...

  3. 【翻译】Best Practices for User interface android 适配不同屏幕、不同分辨率

    地址:http://developer.android.com/training/multiscreen/screendensities.html#TaskProvideAltBmp 安卓支持不同的屏 ...

  4. Python开发环境Wing IDE之Search in Files工具详解

    Search in Files工具是Wing IDE中最强大的搜索选项.它支持磁盘.项目,打开编辑器,或其它文件集的多文件批量搜索.它还可以使用通配符搜索,并可以做基于正则表达式的搜索/替换. 建议用 ...

  5. 【起航计划 007】2015 起航计划 Android APIDemo的魔鬼步伐 06 App->Activity->Forwarding Activity启动另外一个Activity finish()方法

    Android应用可以包含多个Activity,某个Activity可以启动另外的Activity. 这些Activity采用栈结构来管理,新打开的Activity叠放在当前的Activity之上,当 ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装

    1.前言 Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...

  7. MySQL的基础(优化)1

    1,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小 2,在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值 3,对于某 ...

  8. js01

    /////////////////////////////////////////////////////////////js开端/////////////////////////////////// ...

  9. 前端高质量知识(五)-JS详细图解全方位解读this

    在这之前,我们需要来回顾一下执行上下文. 在前面几篇文章中,我有好几个地方都提到执行上下文的生命周期,为了防止大家没有记住,再次来回顾一下,如下图. 执行上下文生命周期 在执行上下文的创建阶段,会分别 ...

  10. 火车进出站(POJ1363)

    题目链接:http://poj.org/problem?id=1363 #include <stdio.h> #include <stack> using namespace ...