蓝桥杯练习系统 ID: 260 凶手

凶手
 

Description

 

巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:

A:我不是罪犯

B:A、C中有一个是罪犯

C:A和B说了假话

D:C和F说了假话

E:其他五个人中,只有A和D说了真话

F:我是罪犯

他们中只有一半说了真话,凶手只有一个。

本题可能有多种可能性,即正确答案(找到唯一的凶手)可能有多个,但每一个可能的答案(某一个是凶手)都满足上述口供。

请编程找出可能的凶手输出。

样例:(假设唯一的凶手是A或者D或者E,则输出结果为三行,按字母顺序依次输出)

A

D

E

 

Input

 

如题所示。

 

Output

 

如题所示。

 

Sample Input 1 

参考上文 

Sample Output 1

参考上文

Hint

HINT:时间限制:1.0s 内存限制:256.0MB

Source

蓝桥杯练习系统 ID: 260 原题链接: http://lx.lanqiao.cn/problem.page?gpid=T260

 

法一:

1 #include<stdio.h>
2 int main()
3 {
4     printf("B\nC\nD\nE\n");
5     return 0;
6 }

 

 

 法二:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 int ret[7];
 6 
 7 int A(){ return ret[0]!=1; }
 8 int B(){ return ret[0]==1||ret[2]==1; }
 9 int C(){ return !A()&&!B(); }
10 int F(){ return ret[5]==1; }
11 int D(){ return !C()&&!F(); }
12 int E(){ return A()&&D()&&!B()&&!C()&&!F(); }
13 int main()
14 {
15     for(int i = 0; i < 6; i ++)
16     {
17         ret[i] = 1;
18         int res = A()+B()+C()+D()+E()+F();
19         if(res == 3) printf("%c\n", i+'A');
20         ret[i] = 0;
21     }
22     return 0;
23 }

 

posted @ 2022-03-23 18:00  泥烟  阅读(86)  评论(0编辑  收藏  举报