1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 判断谁说真话 谁说假话

判断谁说真话 谁说假话

时间:2024-03-10 15:25:12

相关推荐

判断谁说真话 谁说假话

A,B,C,D,E共5个人围成一圈,每人头上戴了一顶帽子,帽子可能是黑色或白色。戴白帽子的人说真话,戴黑帽子的人说假话。

A说:我看到3个人戴白帽子,1个人戴黑帽子;

B说:我看到4个人戴黑帽子;

C说:我看到1个人戴白帽子,3个人戴黑帽子;

D说:我看到4个人戴白帽子。

E什么话都没说。

编程计算出这5个人谁戴白帽子、谁戴黑帽子。

【思路】

戴白帽子算做1(真),戴黑帽子算做0(假)。

那么,如果A戴白帽子,就是B+C+D+E==3;如果A戴黑帽子,就是B+C+D+E!=3。

因此可以得到:((A&&((B+C+D+E)==3)) || (!A&&((B+C+D+E)!=3)))。

同理对B、C、D的说法可以建立计算公式。

最后,遍历A、B、C、D、E的每一种戴帽的可能,把符合计算公式的那些组合值显示出来就可以了。

void findout(void){int a=0, b=0, c=0, d=0, e=0;for(a=0; a<2; a++)for(b=0; b<2; b++)for(c=0; c<2; c++)for(d=0; d<2; d++)for(e=0; e<2; e++){if((((a==1)&&(b+c+d+e==3)) || ((a==0)&&(b+c+d+e!=3)))&&(((b==1)&&(a+c+d+e==0)) || ((b==0)&&(a+c+d+e!=0)))&&(((c==1)&&(a+b+d+e==1)) || ((c==0)&&(a+b+d+e!=1)))&&(((d==1)&&(a+b+c+e==4)) || ((d==0)&&(a+b+c+e!=4)))){printf("a=%d, b=%d, c=%d, d=%d, e=%d\n", a, b, c, d, e);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。