龙空技术网

少儿Python每日一题(5):百钱买百鸡

凤城老人 106

前言:

此时看官们对“百鸡问题python”大致比较关怀,看官们都想要分析一些“百鸡问题python”的相关资讯。那么小编在网摘上网罗了一些关于“百鸡问题python””的相关文章,希望看官们能喜欢,咱们快快来了解一下吧!

原题解答

本次的题目如下所示(原题出处:NOC):

《张邱建算经》卷下第三十八题。文曰:“今有鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,凡百钱买鸡百只,问鸡翁、母、雏各几何?”在题中有三个未知数,却只有两个方程,为不定方程组。

张邱建对此题给出了三组答案:第一组:公鸡四、母鸡十八,小鸡七十八;第二组:公鸡八、母鸡十一,小鸡八十一;第三组:公鸡十二、母鸡四、小鸡八十四。

题目的意思为:公鸡每只5元,母鸡每只3元,三只小鸡1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?

输入:无

输出:公鸡、母鸡、小鸡的个数,以空格隔开,一行输出一组

输入样例:无

输出样例:

0 25 75

4 18 78

8 11 81

12 4 84

本题是一个典型的不定方程组问题。我们知道,在数学上有n个未知数,就需要有n个方程组成方程组。但是这道题,我们从已知条件只能得出3个未知数和2个方程,假设公鸡、母鸡、小鸡的数量分别为x、y、z:

由于少一个方程,这个方程组我们没有办法求解,理论上有无数个解。但是因为实际问题的限制,方程的解只能是正整数,所以我们可以得到有限个解。遇到此类问题,我依然采用枚举的方式解决问题。

在三个未知数的不定方程组中,我们需要确定其中两个未知数的枚举范围,第三个未知数由方程组中的其中一个方程得到。另一个方程用于做判断条件。这样就得到我们的答案了。

本题中公鸡的价格是每只5元,从总价100元可以得知,公鸡的数量不会超过20只;同理,母鸡的价格为每只3元,母鸡的数量不会超过33只。因此,公鸡的数量范围是0~20、母鸡的数量范围是0~33,小鸡的数量为100-公鸡数量-母鸡数量。

由此思路我们可以得到代码如下:

for cock in range(0, 20):    for hen in range(0, 33):        chick = 100 - cock - hen        if 5 * cock + 3 * hen + chick / 3 == 100:            print(cock, hen, chick)
本题拓展

该题目是一条不定方程题,考查范围包括枚举算法,题目难度:★★★

不定方程组的这类题型只要知道这种解题思路,无论题目如何变化,都能很容易做出来。

我们再来看下一道题,也是一个非常经典的问题:

100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。编写程序计算大、中、小马的数目。

输入:无

输出:大马、中马、小马的数量,以空格隔开,每行输入一组

输入样例:无

输出样例:

2 30 68

5 25 70

8 20 72

11 15 74

14 10 76

17 5 78

20 0 80

这道题本质上与上一道题没什么差别。同样我们列出方程组:

根据三个未知数都是正整数这个条件,我们可以得出x的取值范围是0~33,y的取值范围是0~50。由第一个方程得出z = 100 - x - y。通过第二个方程验证结果,代码如下:

for large in range(0, 33):    for medium in range(0, 50):        small = 100 - large - medium        if 3 * large + 2 * medium + small / 2 == 100:            print(large, medium, small) 

标签: #百鸡问题python