一 背景介绍

奶奶给了小花100大洋,让她去集市买鸡。

买鸡要求是:既要有公鸡(cock),也要有母鸡(hen),还要有小鸡(chick)。三种鸡缺一不可,不然回家打屁屁。

市场的行情价是:公鸡5块大洋一只,母鸡3块大洋一只,小鸡仔儿嘛1块大洋可以买到三只。

最后小花买了100只鸡高高兴兴回家了,问她三种鸡各买了几只?

这就是有名的“百钱百鸡”问题,下面尝试分别使用枚举法和公式推导法的思想,使用python语言编程来解决这个问题。

二 枚举法来解决

所谓枚举法就是考察问题中的所有情况,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。

如果手算的话,这种方法肯定是要舍弃掉的,因为它太麻烦,效率太低,但是谁让计算的对象是计算机呢,计算机运算速度快、精确度高,它不在乎,因此我们应该学会这种方法,至于具体的计算嘛,实施环节交给计算机就行了!

下面我们就来具体的讨论一下如何具体的实现它

首先要设置三个变量:cock,hen,chick

我们来一一枚举(列举出每一种鸡可能的最少和最多数量),然后使用range()来实现三个变量数量的迭代(左闭右开):

变量 min max
公鸡(cock)5元/只 1 (100-3-1)//5 =19
母鸡(hen)  3元/只 1   (100-5-1)//3 =31
小鸡(chick)1/3元/只 1   100-cock-hen

列表备注:

虽然chick一只不足1元,但是为了计算简便,我们计算 最多数量 时当成1元,(就算不当成1元,1元中剩下的部分也买不了公鸡和母鸡呀)。

"//"表示地板除(x//y表示x除以y取比目标结果小的最大整数。)

使用for循环来实现

str.format()函数方法是格式化字符串,通过{ }来指定位置,format 函数可以接受不限个参数,位置可以不按顺序,基础用法示例如下:

python代码实现:

# 百钱百鸡---枚举法
# fqy
for cock in range(1,20):       #设置变量cock的取值范围,左闭右开,(cock最多19只)for hen in range(1,32):    #嵌套for循环语句,同理设置hen变量的取值范围,左闭右开chick = 100 - cock - hen #小鸡的数目  if 5*cock + 3*hen + 1/3*chick == 100:   #如果三种鸡的数量满足条件,在下面输出,注意缩进print("公鸡买了{0}只,母鸡买了{1}只,小鸡买了{2}只".format(cock,hen,chick))#设置变量输出指定的位置

运行输出结果:

问题解决啦!

三 公式推导法来解决

使用枚举法解决该问题的缺点在前面已经提到了,就是迭代次数太多了,可以深入分析问题从而来修改程序来减少迭代次数。切入点就是分析方程组不同未知数之间的数量关系,分析如下:

由此可知,公鸡和母鸡是存在上面的数量关系的,公鸡和母鸡的个数只能是整数,所以cock为1,2,3的情况不成立,从4开始迭代(遍历),并且以4为步长进行循环迭代(这样才能保证母鸡的个数也是为整数)

python实现代码如下:

for cock in range(4,13,4):           #从4到12开始迭代,以4为步长hen = int(25 - (7/4)*cock)       #公鸡与母鸡的数量关系,为了使得结果不为浮点数,使用int()chick = int(100-cock-hen)print("公鸡买了{0}只,母鸡买了{1}只,小鸡仔儿买了{2}只".format(cock,hen,chick))

运行输出结果和上面一样:

第二种方法在第一种的基础上,通过深入分析数量关系,通过增加更精确的限制条件减少了实际的迭代次数。

虽然问题已经是老生常谈了,但是运用编程知识解决该问题,并且是用不同的方法来完成这个经典案例,在这个过程中的思考便是自主掌握和提高编程知识,达到掌握能力的一个过程,同时也体会到了优化自己代码和解决方案的重要性。

感谢阅读,如果对你有所启发的话就点个赞鼓励一下吧!

儿时数学课上的“百钱百鸡”问题我又捡起来了相关推荐

  1. Python基础-“百钱百鸡”入门逻辑题(刚开始的建议藏起来)

    一:前言 最近这段时间辣条哥发现学Python的人是越来越多,但是适不适合学Python又有几个人知道呢?说到底编程其实很多时候需要的是较强的思维逻辑能力,如果基础的思维逻辑能力不行的话那辣条就得好好 ...

  2. 算法思想(枚举)——百钱百鸡+生理周期+完美立方+熄灯问题+讨厌的青蛙

    枚举的思想其实时日常生活中提取的一种智慧 ^------^ 枚举的思想在生活中有着非常广泛的应用        在对事物进行归纳推理时,会逐一考察某个事物的所有可能的情况,并且逐一进行检验,这就是枚举 ...

  3. java-不死神兔百钱百鸡

    作业三 作业1 ---------------- 不死神兔(一) ---------------- 有一只兔子,从出生后第3个月起每个月都生只兔子,小兔子长到第三个月后每个月又生一只兔子, 假如兔子都 ...

  4. Java基础练习题(逢七跳过、百钱百鸡、不死神兔、复利(利滚利))

    Java练习题(逢七跳过.百钱百鸡.不死神兔.复利(利滚利)) Java学习中遇到的练习题,用自己的思路解决这几个问题,新手写法,仅供参考 逢七跳过 朋友聚会的时候可能会玩一个游戏:逢七过. 规则是: ...

  5. 100个python算法超详细讲解:百钱百鸡

    1.问题描述 中国古代数学家张丘建在他的<算经>中提出了一个著名的"百钱 百鸡问题":一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现 在要用百钱买百鸡,请问公鸡.母 ...

  6. java while求百钱买百鸡问题_java - 百钱百鸡小算法

    百钱百鸡是一个非常经典的不定方程问题,最早源于我国古代的<算经>,这是古代著名数学家张丘建首次提出的.百钱百鸡问题原文如下: 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买白鸡,问 ...

  7. 7-152 百钱百鸡

    分数 10 全屏浏览题目 切换布局 作者 usx程序设计类课程组 单位 绍兴文理学院 百鸡问题:"今有鸡翁一,值钱五:鸡母一,值钱三:鸡雏三,值钱一.凡百钱买鸡百只,问鸡翁母雏各几何.&qu ...

  8. PTA 7-152 百钱百鸡

    PTA 7-152 百钱百鸡 分数 10 作者 usx程序设计类课程组 单位 绍兴文理学院 百鸡问题:"今有鸡翁一,值钱五:鸡母一,值钱三:鸡雏三,值钱一.凡百钱买鸡百只,问鸡翁母雏各几何. ...

  9. Python趣味算法入门 - 百钱百鸡

    问题描述 中国古代数学家张邱建在他的<算经>中提出了一个著名的"百钱百鸡问题":一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡.母鸡.小鸡 ...

最新文章

  1. pbs分解_UML使用产品分解结构(PBS)教程
  2. java火箭应用_从C++入手,探寻java的特点
  3. linux 查看 定时任务 crontab 日志记录
  4. 回归素材(part7)--机器学习入门到实战-MATLAB实践应用
  5. 盘点:最值得托付终身的星座
  6. python fsolve说明_Python fsolve()抱怨形状.为什么?
  7. PerfDog-移动端性能测试-基本使用
  8. Maven引入jar的总结
  9. 收获,不止SQL优化——抓住SQL的本质--第九章
  10. springMVC 理解大综合
  11. 错误解决办法:2006:MySQL server has gone away
  12. IPFS 相关开发资源汇总
  13. INVENTOR结构件生成器,新建型材
  14. web前端入坑系列回归,再推荐一波学习资源
  15. 软件著作权登记怎么查询
  16. EXCEL批量加入图片
  17. 企业级购物车实现思路
  18. flask读书笔记-flask web开发
  19. Nginx反向代理服务器高速缓存数据结构的部分实现
  20. 安装部署Liberty Neutron

热门文章

  1. java move 方法_Java IFile.move方法代码示例
  2. mac java中文乱码_mac系统命令行窗口输入javac命令,输出中文乱码得问题
  3. encoding和embedding的区别
  4. js连接sqlite(IE内核浏览器适用)
  5. python死循环用什么好弄_是什么神药,治好了我的Python循环语句恐惧症?!
  6. Andrid 多线程下载
  7. 中国开发者地位渐高? V神二度来京, 竟是为了……
  8. 介绍 10 款非主流的 Web 浏览器
  9. ML实操 - 贷款用户逾期情况分析
  10. 如何评估研发人员效能?软件工程师报告帮你看见每个人的贡献