【C++】逻辑题目

文章讨论如何将一道关于识别小偷的逻辑推理问题转化为编程任务,通过遍历嫌疑人并分析他们的话语真假,实现程序自动找出真凶。
摘要由CSDN通过智能技术生成

题目

看一道很简单的小学数学题。

警察局抓了A、B、C、D四名偷窃嫌疑犯,其中有一人是小偷。审问中A说:“我不是小偷。”B说:“C是小偷。”C说:“小偷肯定是D。”D说:“C在冤枉人。”现在已经知道四个人中三个人说的是真话,一个人说的是假话,问到底谁是小偷?

这道题派一名小学生来都会做;可是现在要编程求出来,很多人就没思路了。


解题

  1. 既然A、B、C、D中有一人是小偷,那么我们就先循环遍历这四个人

    for(char t='A'; t<='B'; t++){}
    

  2. 现在我们已经遍历出了待定的小偷,接下来就要判断当前待定小偷符不符合条件了。

    1. 先将每个人说的话都写成表达式,就分别可以得到'A'!=t'C'==tt=='D't!='D'
    2. 而,已知有三句话是真话,也就是说这些表达式中有三个表达式的值为true1)、一个为false0)。
    3. 那么,我们就只需要将这些表达式全部加起来,判断和是否等于3即可。如果成立,就说明当前待定小偷符合条件,直接输出。
    if(('A'!=t)+('C'==t)+(t=='D')+(t!='D')==3){
    	printf("%c", t);
    }
    

完整代码就是这样。

#include<cstdio>
int main(){
	for(char t='A'; t<='D'; t++){
		if(('A'!=t)+('C'==t)+(t=='D')+(t!='D')==3){
			printf("%c", t);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值