1047: 寻找嫌疑人

题目描述
某地刑侦大队对涉及六个嫌疑人(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 ;
}
发布了44 篇原创文章 · 获赞 1 · 访问量 2294

猜你喜欢

转载自blog.csdn.net/Do_________/article/details/103844293
今日推荐