《算经》中的百钱买百鸡问题,你会做吗?试下看看(39)

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

欢迎和猫妹一起,趣味学Python。

今日主题

你知道我国历史上有个王朝叫北魏吗?

北魏(386年—534年),南北朝时期北朝的第一王朝。

也称“后魏”“拓跋魏”“元魏”,鲜卑族拓跋氏所建,传12帝(列入正史帝纪者)

你知道北魏王朝有个著名的数学家叫张丘建吗?

他从小聪明好学,酷爱算术。

一生从事数学研究,造诣很深。

“百鸡问题”是中古时期,关于不定方程正整数解的典型问题,邱建对此有精湛和独到的见解。

著有《张邱建算经》3卷。后世学者北周甄鸾、唐李淳风相继为该书作了注释。刘孝孙为算经撰了细草。

算经的体例为问答式,条理精密,文词古雅,是中国古代数学史上的杰作,也是世界数学资料库中的一份遗产。

你知道张丘建的代表作《算经》吗?

你知道《算经》中有个著名的数学问题叫百鸡百钱吗?

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱。用100文钱,买100只鸡。问公鸡、母鸡、小鸡各多少只?

方程解法

如果上了初中,应该会学到方程,这个问题可以用方法来求解。

未知数称为元,未知数的幂称为次。

假设公鸡、母鸡、小鸡分别为x、y、z只。

由题可得以下方程:

① x+y+z=100 (鸡的总数量为100只)

② 5x+3y+1/3z=100 (鸡的总价格为100文)

根据以上方程,可以得到以下解:

7x+4y=100

本质上是二元一次方程的整数解问题。

x大于等于0,小于等于20

y大于等于0,小于等于33

x=(100-4y)/7

y=(100-7x)/4

化简得x<=14 y<=25,然后x依次0~14逐一取值计算进行验证判断即可。

二元一次方程的整数解属于初中数学问题:

答案是3组

Python遍历解法

在Python编程中,通过穷举法的方式找出所有解法。

  1. 枚举公鸡的数量x=0~20,步长为1。

  2. 在枚举公鸡数量x的前提下,枚举母鸡的数量y=0~33,步长为1。

  3. 根据x和y的值,计算出小鸡的数量z=100-x-y。

  4. 判断当前三种鸡的数量是否符合条件,即5x+3y+z/3=100,如果符合,则输出当前解法。

for x in range(0, 21):    for y in range(0, 34):        z = 100 - x - y        if 5*x + 3*y + z/3 == 100:            print("公鸡:%d只,母鸡:%d只,小鸡:%d只" % (x, y, z))

公鸡:0只,母鸡:25只,小鸡:75只公鸡:4只,母鸡:18只,小鸡:78只公鸡:8只,母鸡:11只,小鸡:81只公鸡:12只,母鸡:4只,小鸡:84只

程序用了两层循环,其实还可以用一层循环,此时理解起来稍微麻烦些,但是运行效率会更高效一些。

​​​​​​​

for x in range(0, 21):    y = 25 - 7*x/4    z = 75 + 3*x/4    if x%4==0 and y >=0:        print("公鸡:%d只,母鸡:%d只,小鸡:%d只" % (x, y, z))

​​​​​​​

公鸡:0只,母鸡:25只,小鸡:75只公鸡:4只,母鸡:18只,小鸡:78只公鸡:8只,母鸡:11只,小鸡:81只公鸡:12只,母鸡:4只,小鸡:84只

穷举法

所谓穷举法,从可能得解的集合中一一枚举各元素,用题目给定的检验条件判定哪些是无用的,哪些是有用的。

由于穷举法需要遍历所有元素,因此它的时间性能往往是最低的,指数级的时间开销往往都是采用穷举带来的,但是它依旧是很重要的算法设计思想。理论上,穷举法可以解决许多计算领域的问题(只要机器性能足够或者时间开销可承受)。

百钱买百鸡问题是一道经典的数学问题,通过方程解法和编程解法,可以找出所有符合条件的解法。

方程解法适用于小规模的问题,对于大规模的问题,可以使用编程解法进行计算。

编程解法使用穷举的方式,可以找出所有解法,但计算量较大,需要耗费一定时间和计算资源。

对于现在的计算机来说,这都不是事儿!

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部