第60课 经典之百钱百鸡问题
经典之百钱百鸡问题(多重循环应用)
百钱百鸡问题是一个数学问题,出自古代。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
意思是公鸡5文钱1只,母鸡3文钱1只,小鸡3只1文钱,我们要用100文钱买100只鸡,那么公鸡、母鸡和小鸡应该各买多少只?

题目分析
通过题目,我们能得到什么呢?
假设公鸡x只,母鸡y只,小鸡z只,必须满足以下5个条件:
(1)0<=x && x<=20(100÷5)。
(2)0<=y && y<=33(100÷3),数量必须是整数)。
(3)0<=z && z<=300(100×3)。
(4)x + y + z=100(总数100只)。
(5)。
百钱百鸡
(1)通过条件(1)(2)(3)构建3层for循环,进行暴力计算。
(2)通过if语句找出同时符合条件(4)和(5)的数量。
运行程序:

提出思考
为什么这个程序输出的结果多了几组可能?
这是因为忽略了一个非常关键的条件——小鸡3只1文钱,小鸡不是一只一只购买的,说明小鸡的数量一定是3的倍数。小鸡的数量要符合z % 3=0。
所以条件需要再用逻辑“与”(&&)连接z % 3==0。
优化
经过优化,少一次循环,在x和y都确定的情况下z可以直接通过100-x-y得到。

运行程序:
这两种计算方式分别要循环多少次呢?看看优化了多少。
(1)21×34×301=214914
(2)21×34=714
优化的效率不是一点点哟!
次数记录
也可以在循环中记录次数,声明count变量,每循环一次自增1。


巩固练习
(1)阅读以下代码,程序的输出结果正确的是()。

A.
C.
B.
D.
(2)阅读以下程序,程序的输出结果正确的是()。

A.1000
B.990
C.1100
D.1
(3)编写一个C++程序,使用三层嵌套循环,找出满足以下条件的所有三位数并输出,中间用空格隔开。
百位数、十位数、个位数的立方和等于这个三位数本身。
例如,153是一个满足条件的数字,因为1^3 + 5^3 + 3^3=153。