各位小伙伴準備好了嗎?
那么開始我們今天的分享吧~
上一次娜娜被一道入門級的邏輯推理題虐的死去活來,回去之后真的是氣的不行不行的。看到了很多小伙伴的留言,表示和娜娜的情況是一樣的。
娜娜立志要帶領小伙伴們學好 java ,怎能被這些題目打到,所以今天娜娜和大家一起來做一道邏輯推理題,鍛煉一下思維如何?
請看題:
有人邀請 A,B,C,D,E,F 6個人參加一項會議,這6個人有些奇怪,因為他們有很多要求,已知:?
? 1)A,B兩人至少有1人參加會議;
? 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;
}
}
相信小伙伴們以后在遇到這類問題
就不會一點想法都沒有了
那么今天的分享就到這里了
小伙伴們再見了
拜拜