6个嫌疑人的一桩案件分析:
(1) A、B中至少1人作案;
(2) AEF3人中至少2个人参加;
(3) AD不可能是同案犯;
(4) BC或同时作案,或者未参加;
(5) CD中有且仅有一个;
(6) 若D没有作案,则E也不可能参与;
编程找出那个作案
答案: import java.util.ArrayList;
public class Police {
private boolean[] suspects;
private ArrayList<boolean[]> likelihood;
/**
* 创建所有的可能性的排列组合
*
* @param i
*/
void makeLikelihoodList(int i) {
if (--i == 0) {
suspects[i] = true;
likelihood.add(suspects.clone());
suspects[i] = false;
likelihood.add(suspects.clone());
} else {
suspects[i] = true;
makeLikelihoodList(i);
suspects[i] = false;
makeLikelihoodList(i);
}
}
/**
* (1) A、B中至少1人作案;<br>
* (2) AEF3人中至少2个人参加;<br>
* (3) AD不可能是同案犯;<br>
* (4) BC或同时作案,或者未参加;<br>
* (5) CD中有且仅有一个;<br>
* (6) 若D没有作案,则E也不可能参与;<br>
*
* @param suspects
*/
public void doLogic(boolean[] suspects) {
boolean a = suspects[0];
boolean b = suspects[1];
boolean c = suspects[2];
boolean d = suspects[3];
boolean e = suspects[4];
boolean f = suspects[5];
if (!(a && b))
return;
if ((a == false && e == false) || (a == false && f == false)
|| (f == false && e == false))
return;
if (a && d)
return;
if (b != c)
return;
if (c == d)
return;
if ((d == false) && (e == true))
return;
System.out.println("[" + " A:" + a + " B:" + b + " C:" + c + " D:" + d
+ " E:" + e + " F:" + f + " ]");
}
public static void main(String[] args) {
Police police = new Police();
new ArrayList<boolean[]>();
police.suspects = new boolean[6];
police.makeLikelihoodList(6);
for (boolean[] suspects : police.likelihood) {
police.doLogic(suspects);
}
}
}
abcf是犯人.