4061: 练4.12 百钱买百鸡
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:4
解决:4
题目描述
百钱买百鸡问题。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
输入
(无)
输出
输出各种鸡翁、鸡母、鸡雏的数量,依次由小到大,每种情况各占一行,每行三个数之间用一个空格隔开。
样例输入 复制
样例输出 复制
提示
#列举鸡翁数的所有可能
for x in range(100//5+1):
#列举鸡母数的所有可能
for y in range(100//3+1):
#列举鸡雏数的所有可能,鸡雏的数量只能是3的倍数
for z in range(0,100*3+1,3):
#满足两个方程组
if 5*x+3*y+z/3==100 and x+y+z==100:
print(x,y,z)
'''
这里用了一个三层循环的程序解决问题。当x取得一个数值时,for的y循环体都要执行遍y的所有取值;当y取得一个数值时,for的z循环体都要执行遍z的所有取值;对于z的每一个取值,if语句都要执行一次。
不难算出,在程序的执行过程中,作为最内层循环体的if语句,将被执行:(1+100/5)*(1+100/3)* (1+3*100)=214914次。而观察程序的运行结果,问题的解远远小于这个数字,只有4组解。如何减少循环次数呢?
'''
#列举鸡翁数的所有可能
for x in range(100//5+1):
#列举鸡母数的所有可能
for y in range(100//3+1) :
#根据x,y计算鸡雏的数量
z= 100-x-y
#满足两个方程组
if 5*x+3*y+z/3==100 and z%3==0:
print(x,y,z)
'''
对于与本题类似的求解不定方程问题,都可以用循环来求解。为提高效率,可以在程序中进行适当优化,减少循环体的执行次数。
'''