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

2023-05-16

1.问题描述
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱
百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现
在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
2.问题分析
用百钱如果只买公鸡,最多可以买20只,但题目要求买100只,由
此可知,所买公鸡的数量肯定在0~20之间。同理,母鸡的数量在0~
33之间。在此不妨把公鸡、母鸡和小鸡的数量分别设为cock、hen、
chicken,则cock+hen+chicken=100,因此百钱买百鸡问题就转化成解
不定方程组的问题了。

 3.算法设计
对于不定方程组,我们可以利用穷举循环的方法来解决,也就是
通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得
到相应的解。因公鸡的取值范围是0~20,可用循环语句“for cock in
range(0,21);”实现。钱的数量是固定的,要买的鸡的数量也是固定的,
所以母鸡数量是受到公鸡数量限制的。同理,小鸡数量受到公鸡和母
鸡数量的限制,因此我们可以利用三层循环的嵌套来解决,第一层循
环控制公鸡的数量,第二层控制母鸡的数量,最内层控制小鸡的数
量。

4.知识点补充
结构化程序设计包括三种基本结构:顺序结构、选择结构(分支
结构)和循环结构(重复结构),利用这三种基本结构可以解决很多
复杂问题。
·顺序结构:一种简单的程序设计,按照程序中语句的顺序依次执
行,每条语句都能被执行且只执行一次。
·选择结构:包括简单选择和多分支选择结构,可根据条件,判断
应该选择哪一条分支来执行相应的语句序列。简单选择结构采用简单
或一般的if语句即可解决,对于复杂的选择结构可以使用嵌套的if…
elif…else语句实现。
·循环结构:可根据给定条件,判断是否需要重复执行某一相同程
序段。
下面介绍Python语言的循环结构。
(1)while循环
while循环语法格式如下:

while 判断条件:
执行语句

其中,判断条件可以是任何表达式,所有非空、非零的值都为
True,当判断条件为False时,循环结束;执行语句可以是单条语句,
也可以是一个语句块。
(2)for循环
for循环语法格式如下:

for iterating_var in sequence:
statements(s),

其中,sequence是任意序列,如列表(数组)、字典或元组等,
也可以通过range()函数产生一个整数列表,以完成计数循环;
iterating_var是序列中需要遍历的元素;statements是待执行的语句块。
range()函数使用格式如下:

range([start , ] stop[ , step])

其中,start为可选参数,表示起始数;stop为终止数,如果range()
函数只有一个参数n,则将产生一个0~(n-1)的整数列表,也就是循环
n-1次;step为可选参数,表示循环步长,不写时,默认步长为1。
需要注意的是,while循环结构首先对while条件进行判断,当条件
为True时,执行条件语句块;当执行完语句块时,再次判断while条件
是否为True,若仍然为True,则继续执行语句块,直到条件为False时
结束循环。
while循环结构的流程图如图1.6所示。


(3)for循环结构
for循环结构首先对for语句的条件判断,游标(序列都会有一个游
标,游标一般从第0个位置开始)指向序列的第0个位置,也就是序列
的第一个元素,判断序列sequence中是否有元素。如果有,就将这个
元素赋值给iterating_var,然后执行循环体语句块,执行完成后,游标
下移一位,再次判断该位置是否有元素;如果有,继续将该元素赋值
给iterating_var,继续执行循环语句块;游标再往下移一位,一直循环
下去,直到下一个位置没有元素时结束循环。
for循环结构的流程图如图1.7所示。

 

 

在循环语句中,循环体可以是由一个或多个语句构成的,当其中
某个语句是循环语句时,即一个循环体中完整地包含了另外一个循
环,就形成了循环嵌套结构,我们称之为多重循环,并且把这个循环
语句称为外层循环语句,而把循环体中的循环语句称为内层循环语
句。在理解多重循环语句时,只要把内层循环语句看作是外层循环语
句的循环体的一部分就可以了。在程序执行时,外层循环语句与内层
循环语句的关系,有点像钟表的时针与分针的关系,分针走了60格,
时针才走1格。对于多重循环来说,只有内层循环语句执行到判断条件
为假时,才返回到其上层循环语句继续执行。

5.确定程序框架
在设计循环时首先要考虑循环的三要素,即循环变量的初值、循
环的控制条件和使循环趋于结束的循环变量值的改变。
针对本题来说,每层循环的初值是0(即买的100只鸡中,可能没
有公鸡,也可能没有母鸡或小鸡);循环的控制条件是公鸡、母鸡和
小鸡用百钱最多能够买到的数量[根据上面分析可知:公鸡最多20
只,母鸡最多33只,小鸡最多100只(虽然百钱最多可以买到300只小
鸡,但题目要求只买100只)];穷举循环的特点就是把所有情况都考
虑到,因此每层循环执行一次,对应循环变量的值就要加1。
程序流程图如图1.8所示。

 

 根据流程图,构建程序框架如下:

cock = 0
while cock <= 20:
# 内层循环控制母鸡数量取值范围为0~33
hen = 0
while hen <= 33:
#内层循环控制小鸡数量取值范围为0~100
chicken = 0
while chicken <= 100:
#条件控制
print("cock=%2d,hen=%2d,chicken=%2d\n" %(cock,hen,chicken))
chicken += 1
hen += 1
cock += 1

6.确定公鸡、母鸡和小鸡数量
根据这三层循环我们可以得到很多种方案,在这些方案中有些是
不符合cock+hen+chicken=100并且5×cock+3×hen+chicken/3=100这两个
条件的。因此结果输出之前我们要把合理的方案筛选出来,即如果结
果满足cock+hen+chicken=100和5×cock+3×hen+chicken/3=100,则输
出。很明显,控制条件即为语句
if(5×cock+3×hen+chicken/3.0==100)and(cock+hen+chicken==100)。
注意: 在Python语言中,使用and关键字表示“逻辑与”;使用or关
键字表示“逻辑或”;使用not关键字表示“逻辑非”。另外,运算符“/”表
示除,x除以y,结果为带小数点的浮点数;而运算符“//”表示取整除,
返回商的整数部分。
7.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 百钱百鸡问题
if __name__=="__main__":
# cock表示公鸡数量,hen表示母鸡数量,chicken表示小鸡数量,总共100只
# 外层循环控制公鸡数量取值范围为0~20
cock = 0
while cock <= 20:
内层循环控制母鸡数量取值范围为
# 内层循环控制母鸡数量取值范围为0~33
hen = 0
while hen <= 33:
#内层循环控制小鸡数量取值范围为0~100
chicken = 0
while chicken <= 100:
# 条件控制
if (5 * cock + 3 * hen + chicken / 3.0 ==100) and (cock + hen
+ chicken ==100):
print("cock=%2d,hen=%2d,chicken=%2d\n" %(cock,hen,chicken))
chicken += 1
hen += 1
cock += 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

100个python算法超详细讲解:百钱百鸡 的相关文章

  • 我所理解的人工智能

    很多人容易把人工智能理解为机器人 机器人是人工智能的一个实际体现 人工智能应用很广泛 下面我来谈谈我的理解 人工智能可分开理解为 人工 和 智能 xff0c 即人类创造出来的智能 xff0c 从广义上来讲只要人类创造出来 xff0c 能为人
  • maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...

    1 我的项目结构是一个父项目 xff0c 多个子项目目录如下 xff1a 2 我这里就举个例子 xff0c 所以应用的也就是core和domain这两个项目 3 两个项目都继承父项目 4 在模块中domain依赖于core xff0c 在c
  • 有关Shiro中Principal的使用

    1 定义 principal代表什么那 xff1f 如果阅读官方文档或者源码你会得到如下的定义 xff1a 解释 xff1a 1 xff09 可以是uuid 2 xff09 数据库中的主键 3 xff09 LDAP UUID或静态DN 4
  • 关于shiro的 subject.getPrincipal()方法

    1 说明 上一篇文章说明了 principal xff0c 而subject getPrincipal 是用来干嘛的 xff0c 他就是来获取你存储的principal xff0c 内部是怎么获取的那 xff0c 多个principal怎么
  • CentOS7 64位安装solr7.2.0

    声明 xff1a 本人为学习solr的新手 xff0c 如编写过程中有部队的地方还请各位大佬指正 本文为原创 xff0c 如要转载请注明出处 你能学到 xff1a 1 linux上solr的安装部署 xff0c 官方给出的运行方式 2 添加
  • 阿里巴巴20121009 研发/算法工程师 笔试试题【修正】

    第19题 a i 在排序后的位置是 i k i 43 k xff0c a i 43 2k 在排序后的位置是 i 43 k i 43 3k xff0c 必然有a i lt 61 a i 43 2k 所以数组a里实际上有2k个各自有序的 交错的
  • printf() % lf出错

    printf 函数中不存在 lf xff0c 输入 double 用 lf 输出用 f
  • 奔腾系列的CPU 和酷睿系列的CPU

    以后奔腾要沦为中下层产品 奔腾D是接替奔腾4的型号 也是INTEL的第一代双核处理器 技术还比较粗糙 发热量控制的也不够好 至于酷睿系列 这可是INTEL的最新力作 性能上有绝对的优势 技术上也对老对手AMD保持了领先 而且功耗控制的也非常
  • 为什么神经网络被称为黑匣子

    数学层面 xff1a 由于网络参数与近似的数学函数之间缺乏明确的连接 xff0c 人工神经网络通常被称为 黑匣子
  • 第八弹 ROS发布者Publisher的编程实现

    1 话题模型 xff08 发布与订阅 xff09 2 创建功能包 catkin create pkg learning topic roscpp rospy std msgs geometry msgs turtlesim 建立一个名为le
  • TRIZ创新思维方法_简要复习

    一 TRIZ介绍 TRIZ理论成功地揭示了创造发明的内在规律和原理 xff0c 着力于澄清和强调系统中存在的矛盾 xff0c 其目标是完全解决矛盾 xff0c 获得最终的理想解 它不是采取折中或者妥协的做法 xff0c 而且它是基于技术的发
  • Generalized Focal Loss: Learning Qualified and Distributed BBoxes for Dense Object Detection论文翻译阅读

    Generalized Focal Loss Learning Qualified and Distributed Bounding Boxes for Dense Object Detection论文翻译阅读 论文下载地址 xff1a 点
  • ubuntu16.04对SD卡进行分区

    赶在2020年上半年的最后一天 xff0c 匆忙地写上一个博客 这篇博客是对自己的一个反思 xff0c 我的博客属于自己完全开辟的内容几很少 xff0c 有些博客大家随便在网上一搜就能找到 说实话 xff0c 有时候我会怀疑自己的智商有问题
  • RT-thread移植指南-RISC-V

    目录 RT thread移植指南 RISC V 1 概述 1 1 移植资料参考 1 2 移植开发环境准备 2 移植步骤 2 1 全局中断开关函数 2 2 线程上下文切换函数 2 3 线程栈的初始化 2 4 时钟节拍的配置 2 5 中断函数
  • 寒假学习心得--从0开始学破解

    寒假学习心得 从0开始学破解 写给和我一样将要接触或者才接触破解 的朋友们 前提 你必须得真正喜欢 她 一 工欲善其事 必先利其器 1 找一个中文版的OD PEID 记得就OD就有咱PYG版的某牛人强化版的等等等等 找一个合适的工具 干起事
  • 常用的“密码重置”代码

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • ORACLE多表查询优化

    转自某地 对作者很愧疚 不晓得地址了 ORACLE 多表查询优化 这里提供的是执行性能的优化 而不是后台数据库优化器资料 参考数据库开发性能方面的各种问题 收集了一些优化方案统计如下 当然 象索引等优化方案太过简单就不列入了 嘿嘿 执行路径
  • Word to PDF Converter v3.0 算法分析及注册机

    Word to PDF Converter v3 0算法分析及注册机 详细过程 1 xff0c 主程序在C Program Files doc2pdf DOC2PDF dll xff0c PEID查壳为ASProtect 1 23 RC1
  • 安全策略调整步骤

    1 修改防火墙 xff0c 保留22 SSHD 8081 APACHE 80 关闭端口443 HTTPS 3306 MYSQL 8080 8088 53 123 2 针对PHP的BUG和安全漏洞 xff0c 只有升级版本一途 xff0c 经
  • 获取微信openid(或昵称头像)的授权登录及其代理

    lt php 本页用于微信授权登录及其代理 64 version V2 0 64 author ty1921 lt ty1921 64 gmail com gt 64 param backurl 传get参数backurl xff0c 则授

随机推荐

  • 常用的PHP文件头和HTML5文件头(含移动端)

    lt php PHP Header Created by ty1921 64 gmail com Ver V1 Date 2017 8 18 1 session session start 2 display errors ini set
  • VB+PHP实现在线修改Windows服务器的配置文件

    本文仅供记录 存档备案用 用途 xff1a 某电话转接系统 xff0c 需要每天修改配置文件 并重启服务端程序 原理 xff1a WEB用于展示修改界面 xff0c 提交 保存配置文件的相关数据 VB端用于定时轮训WEB上保存的数据 xff
  • OLLVM分析

    一 LLVM是什么 LLVM最初是Low Level Virtual Machine的缩写 xff0c 定位是一个 xff0c 但是是比较底层的虚拟机 然而LLVM本身并不是一个完整的编译器 xff0c LLVM是一个编译器基础架构 xff
  • A General Optimization-based Framework for Local Odometry Estimation with Multiple Sensors论文翻译整理

    综述部分 x1f4cc 多传感器融合有两个趋势 xff1a 基于滤波的融合 xff08 MSCKF EKF UKF xff09 基于优化的滤波 xff08 BA xff09 基于滤波器的方法对时间同步很敏感 任何迟来的测量都会引起麻烦 xf
  • 按键精灵的5级开发认证,笔试题参考

    4题是抄的 xff0c 只是为了过级 最后得93分 xff0c 可能代码还是不够最优 xff0c 有看出的大大希望能不吝指点 1 写一个脚本 xff0c 要求启动时 xff0c 记录 xff08 录制 xff09 当前鼠标的移动轨迹 xff
  • 常见端口号和对应服务的概念和作用

    端口号的主要作用是表示一台计算机中的特定进程所提供的服务 网络中的计算机是通过IP地址来代表其身份的 xff0c 它只能表示某台特定的计算机 xff0c 但是一台计算机上可以同时提供很多个服务 xff0c 如数据库服务 FTP服务 Web服
  • 51单片机学习历程---单片机入门

    主要用来做控制的 xff0c 如果要驱动外部设备的话 xff0c 需要使用驱动电路 proteus 模拟 51 8位 最小系统 晶振电路 提供时钟 12M xff08 方便计算机器周期 xff09 11 0592M xff08 非常适合串行
  • 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)

    最近在学STM32 xff0c 基本的学完了 xff0c 想学几个模块来巩固一下知识 xff0c 就想到了蓝牙模块 玩啥好难过有很多博客教怎么连的 xff0c 但自己看起来还是有点糊涂 模块的原理和知识点我就不讲解了 xff0c 这里我主要
  • FreeRTOS实时操作系统----机制

    四 机制 目录 四 机制 4 1任务优先级 4 1 1高优先级抢占低优先级 4 1 2时间片 4 2任务调度器 4 3临界段的保护 4 4空闲任务与阻塞延时 4 5任务延时列表 4 6消息队列 4 6 1消息队列的基本概念 4 6 2消息队
  • 三极管导通条件

    NPN三极管 xff0c 箭头朝外 xff1a 高电平导通 PNP三极管 xff0c 箭头朝里 xff1a 低电平导通
  • 74HC1G66模拟开关,多路复用

    SEL为低电平的时候 xff0c SD导通 SEL为高电平的时候 xff0c SD不导通 直接看数据手册
  • 一张图了解MOS管导通条件

    不管他长什么样 xff0c 直接就看箭头指向 箭头向栅极 xff0c 就是nmos管 xff0c 高电平导通 箭头向外 xff0c 就是pmos管 xff0c 低电平导通 一边连了两根线的就是s极
  • Android SDK的安装配置

    SDK xff1a xff08 software development kit xff09 软件开发工具包 被软件开发工程师用于为特定的软件包 软件框架 硬件平台 操作系统等建立应用软件的开发工具的集合 因此 xff0c Android
  • 1.C++简介

    学习目标 xff1a 初识C 43 43 xff0c 介绍C 43 43 一些简单的语法 xff1a 初识C 43 43 数据类型 运算符 程序流程结构 学习内容 xff1a 1 初识C 43 43 一个简单的C 43 43 框架 xff0
  • 死锁形成的原因和四个必要条件

    死锁的概念 死锁是指两个或两个以上的进程 xff08 线程 xff09 在运行过程中因争夺资源而造成的一种僵局 xff0c 若无外力作用 xff0c 这些进程 xff08 线程 xff09 都将无法向前推进 xff0c 这时就形成了死锁 处
  • Android P阻止调用非sdk api后,Atlas该何去何从

    0 背景 自从Android 9 0后 xff0c Android就已经开始着手阻止app开发调用非sdk的api xff0c 也就是被标记为 64 hide的变量 函数 类不可以通过反射调用 xff0c 否则会提示NoSuchMethod
  • 简历应该这么写!

    很多同学刚开始找工作时 xff0c 投出去很多简历 xff0c 但是都石沉大海了 xff0c 没有后文 之所以简历不通过 xff0c 往往都是简历不够 好看 很多大公司HR经常一天要看几百份 xff0c 甚至上千份简历 xff0c 基本都是
  • 希望计算机专业同学都知道这些老师

    C语言教程 翁凯老师 赫斌 翁恺老师是土生土长的浙大码农 xff0c 从本科到博士都毕业于浙大计算机系 xff0c 后来留校教书 xff0c 一教就是20多年 翁恺老师的c语言课程非常好 xff0c 讲解特别有趣 xff0c 很适合初学者学
  • 100个python算法超详细讲解:抓交通肇事犯

    1 xff0e 问题描述 一辆卡车违反交通规则 xff0c 撞人后逃跑 现场有三人目 该事件 xff0c 但都 没有记住车号 xff0c 只记下了车号的一些特征 说 xff1a 牌照的前两位数字是相 同的 xff1b 乙说 xff1a 牌照
  • 100个python算法超详细讲解:百钱百鸡

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