# 第19期—百钱百鸡

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

我国古代数学家张丘建在《算经》一书中提出了著名的“百钱买百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

意思是:公鸡一只5元,母鸡一只3元,小鸡3只1元。如何用100元买100只鸡,其中公鸡,母鸡,小鸡的数量各是多少?

# 2 解题思路

  • 假设公鸡、母鸡、小鸡的数量分别为X,Y,Z,所以X、Y、Z都大于或等于零
  • 根据公鸡、母鸡、小鸡的数量关系和价格关系判断其数量,可用for循环遍历每种鸡的数量,计算结果
  • 输出正确结果

# 3 解题方法

# 方法一:枚举法

n = 0
for x in range(21):
	for y in range(34):
		z = 100 - x - y
		if 5 * x + 3 * y + z / 3 == 100:
			print(f'公鸡{x}只,母鸡{y}只,小鸡{z}只')
			n += 1
print(f'一共有{n}种买法')
1
2
3
4
5
6
7
8

第1行: 创建变量 n, 用来存储购买的方法数,初始赋值为 0
第2行: 变量 x 表示公鸡的数量,如果用100元全部购买公鸡,最多可购买20只,用for循环遍历公鸡的数量
第3行: 变量 y 表示母鸡的数量,如果用100元全部购买母鸡,最多可购买33只,用for循环遍历母鸡的数量
第4行: 变量 z 表示小鸡的数量,三种鸡的数量共100只,所以 z = 100 - x - y
第5-6行: 每只公鸡5元,每只母鸡3元,每只小鸡 1/3 元,用 if 语句判断,若购买三种鸡花费的总额为100,则用print函数输出每种鸡的数量
第7行: 变量 n 在每次循环后都在原有的基础上加 1
第8行: 用print函数输出共有多少种购买方法

# 方法二:公式推导法

n = 0
for x in range(0, 14, 4):
    y = 25 - 7 * x / 4
    z = 100 - x - y
    if 5 * x + 3 * y + z / 3 == 100:
        print(f'公鸡{x}只,母鸡{y}只,小鸡{z}只')
        n += 1
print(f'一共有{n}种买法')
1
2
3
4
5
6
7
8

第1行: 创建变量 n, 用来存储购买的方法数,初始赋值为 0
第2行: 变量 x 表示公鸡的数量,根据公鸡和母鸡的数量关系推导,可知公鸡 x 的取值范围是 0 到 14,由于 x 是4的倍数,所以range函数步长为4
第3行: 变量 y 表示母鸡的数量,根据公鸡和母鸡的数量关系推导,可知y = 25 - 7/4 x
第4行: 变量 z 表示小鸡的数量,三种鸡的数量共100只,所以 z = 100 - x - y
第5-6行: 每只公鸡5元,每只母鸡3元,每只小鸡 1/3 元,用 if 语句判断,若购买三种鸡花费的总额为100,则用print函数输出每种鸡的数量
第7行: 变量 n 在每次循环后都在原有的基础上加 1
第8行: 用print函数输出共有多少种购买方法

公鸡和母鸡的数量关系推导:


方程组两边同时乘 3 再相减可得:


带入方程组可得:


两边同时除以8,可得公鸡和母鸡的数量关系:


由于 x, y 是正整数,所以可知以下三条结论:

  • x 是4的倍数
  • 0<=7/4x <= 25, 即 0 <= x <= 14
  • y = 25 - 7/4 x

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM