问题 AG: 疑案分析
时间限制: 1.000 Sec 内存限制: 128 MB
题目描述
某地刑警大队对A、B、C、D、E和F共6个嫌疑人进行作案与否的排查,存在如下6条线索:
(1)A、B至少有1人作案;
(2)A、E、F3人中至少有2人参与作案;
(3)A、D不可能是同案犯;
(4)B、C或同时作案,或与本案无关;
(5)C、D中有且仅有1人作案;
(6)如果D没有参与作案,则E也不可能参与作案。
请编程找出作案人。
输入
无
输出
输出作案人。
样例输出 Copy
格式为(以下结果不是最终答案): A:不是罪犯 B:是罪犯 C:是罪犯 D:不是罪犯 E:不是罪犯 F:是罪犯
分析和AC代码:
/** * a b c d e f 六个人各只有两种可能 那就是是罪犯或者不是罪犯 用0表示不犯罪 1表示犯罪 * 所以将a b c d e f六个变量依次循环0和1两个值依次判断组成的六个值是否符合6条线索的要求即可 * 共有2的6次方===32种可能的0 1组合 对其依次判断即可 符合条件即可输出 理论上只有一个符合条件的0 1组合 */
/**
* Created By Liu Xianmeng On 2022/12/28
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
/**
* a b c d e f 六个人各只有两种可能 那就是是罪犯或者不是罪犯 用0表示不犯罪 1表示犯罪
* 所以将a b c d e f六个变量依次循环0和1两个值依次判断组成的六个值是否符合6条线索的要求即可
* 共有2的6次方===32种可能的0 1组合 对其依次判断即可
*/
int a, b, c, d, e, f;
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(
(a+b)>=1 &&
(a+e+f)>=2 &&
(a+d) != 2 &&
(b+c == 2 || b+c == 0) &&
(c+d == 1) &&
(d+e == 0 || d==1)
){
printf("A:%s\n", a==0?"不是罪犯":"是罪犯");
printf("B:%s\n", b==0?"不是罪犯":"是罪犯");
printf("C:%s\n", c==0?"不是罪犯":"是罪犯");
printf("D:%s\n", d==0?"不是罪犯":"是罪犯");
printf("E:%s\n", e==0?"不是罪犯":"是罪犯");
printf("F:%s\n", f==0?"不是罪犯":"是罪犯");
}
}
}
}
}
}
}
return 0;
}