谁是凶手:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为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;
}







  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值