谁是凶手:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为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)在说谎 谁是凶手:_第1张图片

可以得出A在说谎(凶手)


下来我们用C语言来完成找凶手:

#define _CRT_SECURE_NO_WARNINGS 1
#include 
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;
}


谁是凶手:_第2张图片




你可能感兴趣的:(C/C++)