A說:不是我。
B說:是C。
C說:是D。
D說:C在胡說
已知3個人說了真話,1個人說的是假話。
現在根據這些信息,寫一個程序來確定到底誰是兇手。
首先我們分析一下:4個人 1個說謊。當我們判斷出誰在說謊,然後4個條件綜合肯定能指向一個人,這個人就是兇手(也是說謊的那個人)
我們用“1”表示他是兇手,第一位表示D,第二位表示C,第三位表示B,第四位表示A。即ABCD
則:A說 不是他 可表示爲 “0111” 即 ~8
B說 是C 可表示爲 “0010” 即 2
C說 是D 可表示爲 “0001” 即 1
D說 C在胡說 可表示爲 “~C(1110)”
我們依次假設A(BCD)在說謊
可以得出A在說謊(兇手)
下來我們用C語言來完成找兇手:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int A = ~8;
int B = 2;
int C = 1;
int D = ~C;
if((1==((~A)&B&C&D))||(2==((~A)&B&C&D))||(4==((~A)&B&C&D))||(8==((~A)&B&C&D)))
{
printf("A說謊(兇手)\n");
}
if((1==(A&(~B)&C&D))||(2==(A&(~B)&C&D))||(4==(A&(~B)&C&D))||(8==(A&(~B)&C&D)))
{
printf("B說謊(兇手)\n");
}
if((1==(A&B&(~C)&D))||(2==(A&B&(~C)&D))||(4==(A&B&(~C)&D))||(8==(A&B&(~C)&D)))
{
printf("C說謊(兇手)\n");
}
if((1==(A&B&C&(~D)))||(2==(A&B&C&(~D)))||(4==(A&B&C&(~D)))||(8==(A&B&C&(~D))))
{
printf("D說謊(兇手)\n");
}
return 0;
}