公安人员审问四名窃贼嫌疑犯 C

题干: 公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:甲说“乙没有偷,是丁偷的”, 乙说“我没有偷,是丙偷的”,丙说“甲没有偷,是乙偷的”,丁说“我没有偷”。请根据这四人的答话判断谁是盗窃者。

我在网上看到这样的代码感觉很简洁,分享给大家

#include <stdio.h>
int main
{
	char cri;
	for (cri = 'a'; cri <= 'd'; cri++)//a为甲 d为丁
	{
		if ((cri != 'b' + (cri == 'd') != 1) && ((cri != 'b') + (cri` == 'c') != 1) && ((cri != 'a') + (cri == 'b') != 1))
			break;
	}
	putchar(cri);
	return 0;
}

甲说“乙没有偷,是丁偷的”,
乙说“我没有偷,是丙偷的”,
丙说“甲没有偷,是乙偷的”,
丁说“我没有偷”。
若说真话则整句都是真的,若说假话则整句都是假的。(题干隐含意思)

想想这题的小偷会是谁,才能让他们的话不会互相冲突。
逻辑上 在已经找到小偷是谁的前提下
以甲为例:
cri != ‘b’ + (cri == ‘d’) != 1

小偷!=乙+(小偷==丁)!=1
恒成立 即无论甲说真话还是假话上式都成立

甲乙丙的逻辑用&&串起来时,可以判断是不是小偷,是的情况可以使所有人的话不起冲突。
然后在if语句外面套一层遍历for就能找出小偷

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值