课程首页 › 第3部分 › 第60课

第60课 经典之百钱百鸡问题

第3部分 不辞辛苦 · 循环结构· 知识点:多重循环应用

经典之百钱百鸡问题(多重循环应用)

百钱百鸡问题是一个数学问题,出自古代。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

意思是公鸡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。