程序设计基础第四版清华大学出版社任务4.2某地刑侦大队对涉及6个犯罪嫌疑人的一桩疑案进行分析

某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:
1.A、B 至少有一人作案;
2.A、E、F 三人中至少有两人参与作案;
3.A、D 不可能是同案犯;
4.B、C 或同时作案,或与本案无关;
5.C、D 中有且仅有一人作案;
6.如果 D 没有参与作案,则 E 也不可能参与作案。

/*
谁是犯罪嫌疑人
*/
#include<iostream>
using namespace std;
int main() {
	int A, B, C, D, E, F;
	//由于题目中涉及了六个犯罪嫌疑人,所以如果再对A,B,C,D,E,F嵌套六次for循环的话就会显得很冗长
	for (int i = 0; i < 64; i++)/*这里是用i表示所有的情况,二进制中每一位的0或1就表示某人是否犯罪*/
	{
		F = i & 1;//这里是按位与运算,目的是提取出二进制的最低位
		E = (i & 2) >> 1;//i与2按位与运算后再右移1位,提取出二进制的从右往左数第二位
		D = (i & 4) >> 2;//一定要记得加括号!!!
		C = (i & 8) >> 3;
		B = (i & 16) >> 4;
		A = (i & 32) >> 5;//至此我们假设了每一个嫌疑人的犯罪情况,1表示犯罪,0表示未犯罪
		//题目中给出了六句话,即六句话都为真。我们只要把这六句话相与,如果值为1就得到了结果
		bool s1, s2, s3, s4,s5,s6;
		s1 = A || B;//或运算,若值为1则表示A,B中至少有一人犯罪
		s2 = !(A && D);//非运算,与运算,表示A,D不为同案犯
		s3 = (A && E) || (A && F) || (E && F);//A,E,F中至少有两人作案
		s4 = (B&&C)||(!B&&!C);//同或运算,B,C要么同案,要么无关
		s5 = (C && !D) || (!C && D);//C,D有且仅有一人参加
		s6 = D || (!D && !E);//最好是列真值表,把所有s6为1的情况进行或运算
		if(s1&&s2&&s3&&s4&&s5&&s6)
		{
			cout << "A" << (A == 1 ? "是" : "不是" )<< "罪犯"<<endl;
			cout << "B" << (B == 1 ? "是" : "不是") << "罪犯" << endl;
			cout << "C" << (C == 1 ? "是" : "不是") << "罪犯" << endl;
			cout << "D" << (D == 1 ? "是" : "不是") << "罪犯" << endl;
			cout << "E" << (E == 1 ? "是" : "不是") << "罪犯" << endl;
			cout << "F" << (F == 1 ? "是" : "不是") << "罪犯" << endl;
			/*这边运用了三目运算符的相关知识*/
			
		}
	}
	return 0;
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Grausam

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

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

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

打赏作者

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

抵扣说明:

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

余额充值