题目描述
某地刑侦大队对涉及六个嫌疑人(A、B、C、D、E、F)的一桩疑案进行分析:
A、B至少有一人作案;
A、E、F三人中至少有两人参与作案;
A、D不可能是同案犯;
B、C或同时作案,或与本案无关;
C、D中有且仅有一人作案;
如果D没有参与作案,则E也不可能参与作案。
#include<iostream>
using namespace std;
int main()
{
int A, B, C, D, E, F ;//定义A到E六个变量,作案等于1,否则等于0
int count=0;
char arr[6];
for(A = 0 ; A <= 1 ; A++)
for(B = 0 ; B <= 1 ; B++)
for(C = 0 ; C <= 1 ; C++)
for(D = 0 ; D <= 1 ; D++)
for(E = 0 ; E <= 1 ; E++)
for(F = 0 ; F <= 1 ; F++){
if(6 == //每一个都成立
( A || B ) //A、B 至少有一人作案(A作案,B作案,A、B都作案)
+( !(A && D) ) //A、D 不可能是同案犯(A作案或者D作案,则A&&D为假)
+( (A && E) || (A && F) || (E && F) ) //A、E、F 三人中至少有两人参与作案(枚举:A、E,A、F或E、F成立,三个作案一定满足两个作案的条件,if成立)
+( (B && C) || (!B && !C) ) //B、C 或同时作案,或与本案无关
+( (C && !D) || (D && !C) ) //C、D 中有且仅有一人作案(C作案、D不作案或C不作案、D作案)
+( D||(!E)) ) //如果D没有参与作案,则E也不可能参与作案。(D没有作案,则E为0,!E为1,||为真;若D作案了,D为1,无论E为什么结果为真)
{
if(A==1)arr[count++]='A';
if(B==1)arr[count++]='B';
if(C==1)arr[count++]='C';
if(D==1)arr[count++]='D';
if(E==1)arr[count++]='E';
if(F==1)arr[count++]='F';
}
}
for(int i=0;i<count-1;i++){
printf("%c ",arr[i]);
}
printf("%c\n",arr[count-1]);
return 0 ;
}