永发信息网

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

答案:4  悬赏:20  手机版
解决时间 2021-02-18 03:44
  • 提问者网友:王者佥
  • 2021-02-17 21:35
原题如下:一个超难的脑筋急转弯,张三说李四说慌,李四说王五说慌,王五说张三和李四都在说谎,问究竟谁在说谎,谁没说谎?

==

#include
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)
不理解,谁能帮忙解释下?
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-02-17 22:19
王五说张三和李四都在说谎(一种情况:王五真话;一种情况:王五说谎)
(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
全部回答
  • 1楼网友:轻熟杀无赦
  • 2021-02-18 00:11
代码可以直接运行,结果是张三说假话,李四说真话,王五说假话。这里abc分别表示3个人,当变量的值是0时表示对应的人说谎。通过循环把所有情况列出来,排除不符合条件的,剩下的就是真相 #include 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 == 1 && b == 1 )  //张三说真话,李四也说真话 continue ;          //不符合条件,继续下一个循环 if( a == 0 && b == 0 )  //张三、李四都说假话 continue ; if( b == 1 && c == 1 )  //李四、王五都说真话 continue ; if( b == 0 && c == 0 )  //李四、王五都说假话 continue ; if( c == 1 && !( a == 0 && b == 0 ) ) //王五说真话但张三李四没有都说谎 continue ; if( c == 0 && ( a == 0 && b == 0 ) ) //王五说假话但张三李四没有都说真话 continue ; if( a == 1 ) printf( "张三说真话 " ) ; else printf( "张三说假话 " ) ; if( b == 1 ) printf( "李四说真话 " ) ; else printf( "李四说假话 " ) ; if( c == 1 ) printf( "王五说真话\n" ) ; else printf( "王五说假话\n" ) ; }     return 0;   }
  • 2楼网友:笑迎怀羞
  • 2021-02-17 23:56
就是让 王五说张三和李四都在说谎 这个条件成立 (c&&a+b==0||!c&&a+b!=0)) 如果张三说的是真的 c&&a+b==0就是1 否则!c&&a+b!=0就是1 if里的三个条件都是1 的时候 此时的三个人说谎与否的情况就是对的
  • 3楼网友:荒野風
  • 2021-02-17 23:39
有意思!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯