判断谁说真话,谁说假话
生活随笔
收集整理的這篇文章主要介紹了
判断谁说真话,谁说假话
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
A,B,C,D,E共5個(gè)人圍成一圈,每人頭上戴了一頂帽子,帽子可能是黑色或白色。戴白帽子的人說真話,戴黑帽子的人說假話。
A說:我看到3個(gè)人戴白帽子,1個(gè)人戴黑帽子;
B說:我看到4個(gè)人戴黑帽子;?
C說:我看到1個(gè)人戴白帽子,3個(gè)人戴黑帽子;
D說:我看到4個(gè)人戴白帽子。
E什么話都沒說。
編程計(jì)算出這5個(gè)人誰戴白帽子、誰戴黑帽子。?
【思路】
戴白帽子算做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)))。
同理對(duì)B、C、D的說法可以建立計(jì)算公式。
最后,遍歷A、B、C、D、E的每一種戴帽的可能,把符合計(jì)算公式的那些組合值顯示出來就可以了。
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);}}}總結(jié)
以上是生活随笔為你收集整理的判断谁说真话,谁说假话的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《赛博朋克2077》升级主机版本怎么继承
- 下一篇: 开源及在线PPP网站合集(持续更新)