各位小夥伴準備好了嗎?java
那麼開始咱們今天的分享吧~c++
上一次娜娜被一道入門級的邏輯推理題虐的死去活來,回去以後真的是氣的不行不行的。看到了不少小夥伴的留言,表示和娜娜的狀況是同樣的。blog
娜娜立志要帶領小夥伴們學好 java ,怎能被這些題目打到,因此今天娜娜和你們一塊兒來作一道邏輯推理題,鍛鍊一下思惟如何?編譯器
請看題:編譯
有人邀請 A,B,C,D,E,F 6我的參加一項會議,這6我的有些奇怪,由於他們有不少要求,已知: 入門
1)A,B兩人至少有1人蔘加會議;class
2)A,E,F 3人中有2人蔘加會議;基礎
3)B和C兩人一致決定,要麼兩人都去,要麼兩人都不去;搜索
4)A,D兩人中只1人蔘加會議;循環
5)C,D兩人中也只要1人蔘加會議;
6)若是D不去,那麼E也決定不去。
那麼最後究竟有哪幾我的參加了會議呢?
這道題是很基礎的邏輯推理題了,是否是已經準備好拿起筆來推理了呢?可是小夥伴們呀~今天咱們不是要用本身的大腦來推理,而是要用 Java 程序y呦~因此請把手上的小本本合起來,打開編譯器,打開記事本也行,咱們開始~
看到這個題的第一想法就是,沒有別的簡便方法,直接用暴力搜索,先把全部的可能性都想到,而後把條件都寫出來,知足全部條件的就是正確答案。
0 表明不去參加會議,1 表明去參見會議,而後我們按照已知條件來寫條件語句。
在把這些條件放進去進行循環就能夠了。
得出結果:
程序的功能已經實現了,可是代碼看着有些繁瑣,咱們簡化一下代碼:
上面是正向的思惟,知足條件的的狀況來設置條件代碼,下面咱們用逆向的思惟,反着來排除全部的不正確的狀況,剩下的就是正確答案:
簡化以後咱們就只須要考慮錯誤的狀況,你只要知足錯誤的條件咱們就返回 false,最後剩到最後的就是正確答案了!
最後結果:
完整代碼:
public class Meeting2 {
public static void main(String[] args) {
for(int a=0;a<2;a++){// 0表明不去,1表明去
for(int b=0;b<2;b++){
for(int c=0;c<2;c++){
for(int d=0;d<2;d++){
for(int e=0;e<2;e++){
for(int f=0;f<2;f++){
if (tm(a,b,c,d,e,f)) {
System.out.println("a="+a+",b="+b+",c="+c+",d="+d+",e="+e+",f="+f);
}
}
}
}
}
}
}
}
private static boolean tm(int a,int b, int c, int d, int e, int f){
if((a+b)==0){
return false;
}
if((a+e+f)!=2){
return false;
}
if((b+c)==1){
return false;
}
if((a+d)!=1){
return false;
}
if((c+d)!=1){
return false;
}
if(d==0&&e==1){
return false;
}
return true;
}
}
相信小夥伴們之後在遇到這類問題
就不會一點想法都沒有了
那麼今天的分享就到這裏了
小夥伴們再見了
拜拜