第62课 有人说谎
有人说谎(多重循环、逻辑推理)
来一场逻辑思考,找出说假话的人。
家里有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部分 点、线、面、立体的组合 —— 数组
第四部分
点、线、面、立体的组合
——数组