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)
'''
对于与本题类似的求解不定方程问题,都可以用循环来求解。为提高效率,可以在程序中进行适当优化,减少循环体的执行次数。
'''