Python编程算法【十九】 马克思手稿中的数学题
【案例内容】
马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?
【解题思路】
这看上去是一道典型的数学题,但借助编程算法来求解,可以很方便、快速的穷举出所有答案。首先我们可以用数学的思路,设男人有 x 人,女人有 y 人,小孩则有 30 - (x + y) 人,再根据第二个条件——花了50先令,则可列式 3x + 2y + 30 - (x + y) = 50,进一步整理可得 2x + y = 20,注意题目中有一个隐含的暗示,就是男人、女人或小孩至少都要有1人。因此,从式子 2x + y = 20,可知 x 的取值范围就是1-9,那么用for循环就能快速得出男人、女人和小孩的数量。
【Python代码】

注意,在for循环中的range的取值范围要写1-10,这样才能取到1-9的数值。对于有多种求解方案的数学题,利用编程算法来解答,是再方便不过了,通过“穷举法”(也称枚举法)把多种可能全部找出来,就是本题的答案了。作为扩展,如果把人数和总钱数,都用变量来代替,那么就可以变成更多不同的题目,但解题的道理都是一样的,正所谓万变不离其宗。