马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,他们在同一家饭馆吃饭,总共花了50先令。已知每个男人吃饭需要花3先令,每个女人吃饭需要花2先令,每个小孩吃饭需要花1先令,请编程求出男人、女人和小孩各有几人。
问题可以用下面的方程式代替,男人X,女人Y,小孩Z。
X+Y+Z=30
3X+2Y+Z=50
下面直接上代码:
########################
if __name__=="__main__":
# 变量x、y和z分别代表男人、女人和小孩
print(" 男人 女人 小孩 ")
number = 0 # 可能的值的组数
# 将变量x的可能取值依次代入方程组
for x in range(0, 10+1):
y = 20 - 2*x # 方程③,当x一定时,可确定y值
# 方程①,当x、y一定时,可确定z值
z = 30 -x-y
# 代入方程②检验,当前获得的x、y、z是否为不定方程组的一组解
if 3*x + 2*y + z == 50:
number += 1
print("%2d:%4d%5d%6d" % (number, x,y, z))
########################
执行结果如下:
男人 女人 小孩
1: 0 20 10
2: 1 18 11
3: 2 16 12
4: 3 14 13
5: 4 12 14
6: 5 10 15
7: 6 8 16
8: 7 6 17
9: 8 4 18
10: 9 2 19
11: 10 0 20
共有11种结果,你猜对了几种?
当然你也可以用下面这种FOR循环的方法:
for x in range(30):
for y in range(30):
for z in range(30):
if x+y+z==30 and 3*x+2*y+z==50:
print(x,y,z)
执行结果一样。
________________END______________
网友评论