誰是兇手:

日本某地發生了一件謀殺案,警察通過排查確定殺人兇手必爲4個嫌疑犯的一個。以下爲4個嫌疑犯的供詞。
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;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章