猜凶手问题

问题概述:

题目:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手。

目录

一.思路解析:

二.代码实现:

        一.三真一假组合生成:

        二.连接条件(嫌疑犯的话)

        三.所有代码:

四.美图分享:


一.思路解析:

1.每个人说的话不是真就是假(1/0),有三个人说真话,即为a+b+c+d=3,等于三的组合有很多种,       我们可以使用for循环生成这些组合。

2.在三真一假的前提下,我们还要将每个人说的条件串联起来,这样就需要假设每个人说的话是真的,C语言中“真”用1表示,将所有人的条件用真假表示,再相加判断是否等于3(不等于是是因为其中一个人是假话)

二.代码实现:

        一.三真一假组合生成:

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	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 == 3)
	{
		if ((b && c + b && d + c && d == 1) + (c == 0) + (d == 0) + (c == 0) == 3)
		{ //a说凶手不是我,则bcd其中一个是凶手,用代码表示就是b && c + b && d + c && d == 1,其他同理
			if (a == 0)
			{
				printf("凶手是a");
			}
			if (b == 0)
			{
				printf("凶手是b");
			}
			if (c == 0)
			{
				printf("凶手是c");
			}
			if (d == 0)
			{
				printf("凶手是d");
			}
		}
	}

        三.所有代码:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	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 == 3)
					{
						if ((b && c + b && d + c && d == 1) + (c == 0) + (d == 0) + (c == 0) == 3)
						{
							if (a == 0)
							{
								printf("凶手是a");
							}
							if (b == 0)
							{
								printf("凶手是b");
							}
							if (c == 0)
							{
								printf("凶手是c");
							}
							if (d == 0)
							{
								printf("凶手是d");
							}
						}
					}
				}
			}
		}
	}
	return 0;
}

四.美图分享:

6f1fd6cb817c466ea8c4b27f0c6f2fc0.jpg

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

White graces

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值