MOOC清华《程序设计基础》第3章:谁是嫌疑犯(位运算循环枚举)

某市刑侦大队正在调查一桩疑案,对涉及到的六名嫌疑人进行分析。已知有如下事实:

(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()
{
	for(int i = 0; i < (1 << 6); i++)
	{
		int A = (i >> 5) & 1;
		int B = (i >> 4) & 1;
		int C = (i >> 3) & 1;
		int D = (i >> 2) & 1;
		int E = (i >> 1) & 1;
		int F = i & 1;
		
		bool b1 = (A == 1)||(B == 1);
		bool b2 = ((A == 1)&&(E == 1))||
				  ((A == 1)&&(F == 1))||
				  ((E == 1)&&(F == 1));
		bool b3 = !((A == 1)&&(D == 1));
		bool b4 = ((B == 1)&&(C == 1))||
				  ((B == 0)&&(C == 0));
		bool b5 = ((C == 1)&&(D == 0))||
				  ((C == 0)&&(D == 1));
		bool b6 = ((D == 0)&&(E == 0))||(D == 1);
		if(b1 && b2 && b3 && b4 && b5 && b6)
		{
			cout << A << B << C << D << E << F << endl;
			break;
		}
	}
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值