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