注册 登录
编程论坛 C++教室

谁说真话说假话这一类问题的思路是什么啊?

a99875984 发布于 2013-03-23 15:35, 3495 次点击
    有四位同学,其中一位做了好事不留名,表扬信来了之后,校长问这四位是谁做的好事。A说:不是我。B说:是C。C说:是D。D说:他胡说。已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。
    如题,这种题的思路是什么啊?没碰到过几次,不会啊
6 回复
#2
yuccn2013-03-23 16:52
逻辑题,可以参考下钱能的那边c++教程。有一道类似的题目
#3
qunxingw2013-03-23 17:00
好多类似题都把条件放多重循环
#4
不玩虚的2013-03-23 22:31
楼上正解,逻辑题,先慢慢逻辑逻辑逻辑去吧。编程的话也得先弄明白吧
#5
yuccn2013-03-23 22:47
A说:不是我。B说:是C。C说:是D。D说:他胡说

转换一下,ABCD四个人的答案是: 非A,C ,D,非D。三个人有一个说假话,也就是说:

非A
C
D
非D

四个条件成立三个,也就是说  :非A + C + D + 非D = 3。


也知道只有一个人做好事不留名,所以只能是ABCD中的一个,可以枚举一下就知道了。

转换成代码就是:

void Who()
{
    char X;
    for (X = 'A'; X <= 'D'; X++) {
        if ((X != 'A') + (X == 'C') + (X == 'D') + (X != 'D') == 3) {
            printf("做好事的人是:%c.\n", X);
        }
    }
}

void main()
{
    Who();
}

#6
yuccn2013-03-23 22:48
运行结果:
C:\Users\yuccn>C:\code\test\vecter\Debug\vecter.exe
做好事的人是:C.

C:\Users\yuccn>



#7
a998759842013-03-23 23:30
回复 5楼 yuccn
哦,我明白了,谢谢版主
1