关于C语言问题 张三李四王五说谎的问题
解决时间 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
有意思!
我要举报
大家都在看
推荐资讯