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

第62课 有人说谎

第3部分 不辞辛苦 · 循环结构· 知识点:多重循环、逻辑推理

有人说谎(多重循环、逻辑推理)

来一场逻辑思考,找出说假话的人。

家里有4个孩子,分别是甲、乙、丙和丁。一天,放在餐桌上的糖果少了几颗,母亲问是谁偷吃了糖果。

4个孩子各有说辞。

甲说:“我们中有人偷吃了糖果。”

乙说:“我们4个都没有偷吃糖果。”

丙说:“乙和丁至少有一人没有偷吃糖果。”

丁说:“我没有偷吃糖果。”

如果4个孩子中有两个说的是真话,有两个说的是假话,那么说真话的是哪两个孩子?

如何使用程序找出说真话的孩子呢?

逻辑思考

分别将甲、乙、丙、丁用程序表达,甲为x,乙为y,丙为n,丁为m。将偷吃糖果设定为1,没偷吃设定为0。

再试着将他们说的话用程序表达:

甲说:“我们中有人偷吃了糖果。”意味着至少有一个偷吃了→x + y + n + m>0

乙说:“我们4个都没有偷吃糖果。”都没吃→x + y + n + m==0

丙说:“乙和丁至少有一人没有偷吃糖果。”→y + m<=1

丁说:我没有偷吃糖果→m==0

4句话两句真,两句假。

(x + y + n + m>0)+(x + y + n + m==0)+(y + m<=1)+(m==0)==2

判定条件已经确定,尝试可能的数值,4个人都只有1(偷吃)和0(没偷吃)两种情况,构建4层循环。

插图

根据最终得出的x、y、n、m的结果推断谁说的是真话:

(1)如果(x + y + n + m>0)成立,则甲说的是真话。

(2)如果(x + y + n + m==0)成立,则乙说的是真话。

(3)如果(y + m<=1)成立,则丙说的是真话。

(4)如果(m==0)成立,则丁说的是真话。

谁说真话

插图

运行程序:

甲说的是真话。

丙说的是真话。

甲说的是真话。

丙说的是真话。

甲说的是真话。

丙说的是真话。

甲说的是真话。

丙说的是真话。

一共有4种情况,结果都判定为甲和丙说的是真话。

插图

巩固练习

(1)下列哪个循环结构至少执行一次?()

A.for循环

B.while循环

C.do-while循环

D.都不一定

(2)在C++中,执行循环迭代,哪个关键字通常用于跳到下一次循环?()

A.skip

B.next

C.continue

D.break

(3)编写一个C++程序,用户输入高度后生成一个菱形图案。高度必须为奇数,以便图案呈现对称性。

示例:

第4部分 点、线、面、立体的组合 —— 数组

第四部分

点、线、面、立体的组合

——数组