抓小偷逻辑问题

题目:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。

程序分析:分析题目知,每个人都可能说真话和假话,所以每个人都可能是0或1,通过for循环将所有可能列举,然后根据题目知,当a+b+c+d == 1且(a == 0) + (c == 1) + (d == 1) + (d != 1) == 3同时成立时可以得出答案。
代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>

int main()
{
	int a, b, c, d;
	for (a = 0; a <= 1; a++)
		for (b = 0; b <= 1; b++)
			for (c = 0; c <= 1; c++)
				for (d = 0; d <= 1; d++)
				{
					if(a+b+c+d == 1)
					if ((a == 0) + (c == 1) + (d == 1) + (d != 1) == 3)
						printf("a = %d,b = %d,c = %d,d = %d\n", a, b, c, d);
				}

	system("pause");
	return 0;
}

发布了36 篇原创文章 · 获赞 21 · 访问量 6234

猜你喜欢

转载自blog.csdn.net/lxlcnb/article/details/89323551
今日推荐