首 页 华育简介 就业解决方案 课程师资 高端合作 就业明星 在线报名 华育人专区
选择华育,选择品质生活
 
 
 
技术交流区 首页 - 华育新闻 - 关于华育


一个有趣的案件分析题,怎样用java算法实现

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是犯人.

 

 
 
网站首页 | 在线咨询 | 在线报名 | 多方合作 | 联系方式 | 加入收藏 | 设为首页
Copyright 2009 华育国际西安软件实训基地 陕ICP备08006040号
联系电话:029-87208781 029-87208782 029-87208783
地址:西安市北大街新时代广场5层 710003
咨询QQ:1065173532 Http://www.xaeduask.com