问题描述
巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
A:我不是罪犯
B:A、C中有一个是罪犯
C:A和B说了假话
D:C和F说了假话
E:其他五个人中,只有A和D说了真话
F:我是罪犯
他们中只有一半说了真话,凶手只有一个。
本题可能有多种可能性,即正确答案(找到唯一的凶手)可能有多个,但每一个可能的答案
(某一个是凶手)都满足上述口供。
请编程找出可能的凶手输出。
样例:(假设唯一的凶手是A或者D或者E,则输出结果为三行,按字母顺序依次输出)
A
D
E
代码如下:
public class 凶手 {
/**
* 巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
A:我不是罪犯
B:A、C中有一个是罪犯
C:A和B说了假话
D:C和F说了假话
E:其他五个人中,只有A和D说了真话
F:我是罪犯
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]=new int[6]; //刚开始六个人,对应数值都是0
for (int i = 0; i < arr.length; i++) {
arr[i]=1; //假设第i+1个人是凶手,1代表是凶手,0代表不是凶手
int count = 0; //用来存入说真话的人数
boolean f1=false,f2=false,f3=false,f4=false,f5=false,f6=false; //刚开始都是false
//&&代表括号里面必须都为true才能执行语句,||代表里面有一个是true就执行下面语句
if(arr[0]!=1) {f1=true;count++;}
if(arr[0]==1||arr[2]==1) {f2=true;count++;}
if(!f1&&!f2) {f3=true;count++;}
if(arr[5]==1) {f6=true;count++;}
if(!f3&&!f6) {f4=true;count++;}
if(f1&&!f2&&!f3&&f4&&!f6) {f5=true;count++;}
if (count==3) { //判断是否有三个人说真话
System.out.println((char)(i+65));
}
arr[i]=0; //假设完了之后需要归零,进行下一次假设
}
}
}
程序运行结果如下:
B
C
D
E