关于C语言问题 张三李四王五说谎的问题

原题如下:一个超难的脑筋急转弯,张三说李四说慌,李四说王五说慌,王五说张三和李四都在说谎,问究竟谁在说谎,谁没说谎?

==
/*说谎.c 说谎*/
#include<stdio.h>
int main()
{
int a,b,c;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
if((a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0))
{
printf("张三说了%s.\n",a?"真话":"假话");
printf("李四说了%s.\n",b?"真话":"假话");
printf("王五说了%s.\n",c?"真话":"假话");
}
}
===
其中下面这一段
(c&&a+b==0||!c&&a+b!=0)
不理解,谁能帮忙解释下?

就是让 王五说张三和李四都在说谎 这个条件成立
(c&&a+b==0||!c&&a+b!=0))
如果张三说的是真的 c&&a+b==0就是1
否则!c&&a+b!=0就是1

if里的三个条件都是1 的时候 此时的三个人说谎与否的情况就是对的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-24
王五说张三和李四都在说谎(一种情况:王五真话;一种情况:王五说谎)
(c&&a+b==0||!c&&a+b!=0)
运算符的优先级问题
先+再==最后&&:c&&((a+b)==0)
(a+b)==0:当且仅当a=0,b=0(即张三、李四都说谎)时,才有a+b=0
先+再!=最后&&:c&&((a+b)!=0)
(a+b)!=0:当a、b不全为0(即张三、李四不都说谎)时,有a+b!=0本回答被提问者采纳
第2个回答  2011-02-23
对应王五说张三和李四都在说谎
如果c没说谎
则a,b都说谎
如果c说谎
a,b有一人说真话
第3个回答  2011-02-23
有意思!
相似回答