嵌入式linux面試題解析(四)——邏輯推理一
1、誰是罪犯問題
????一位法官在審理一起盜竊案時,對涉及到的四名嫌疑犯A、B、C、D進行了審問。四人分別供述如下:
????A:“罪犯在B、C、D三人之中。”
????B:“我沒有作案,是C偷的。”
????C:“在A和D中間有一個是罪犯。”
????D:“B說的是事實”
????經過充分的調查,證實四人中只有兩人說了真話,并且罪犯只有一個。請確定真正的罪犯。
解答:
?
#include?<stdio.h>int?main(int?argc,?char?*argv[]){//假設A是罪犯unsigned?int?killer?=?'A';int?flags?=?0;//A、B、C、D說真話的值為1,說假話為0,四個人所說真假的和//假設A、B、C、D都是罪犯,遍歷四種可能for(killer?=?'A';?killer?<=?'D';?killer++){flags?=?(killer?==?'B'?||?killer?==?'C'?||?killer?==?'D');flags?+=?(killer?==?'C');flags?+=?(killer?==?'A'?||?killer?==?'D');flags?+=?(killer?==?'C');if(flags?==?2)//A、B、C、D中有兩個人說的是真話{printf("killer?is?%c\n",?killer);}}return?0;}
輸出結果:
killer is D
2、小狗、小兔、小貓、小猴和小鹿參加百米賽跑,比賽結束后,
????小猴說:“我比小貓跑得快。”
????小狗說:“小鹿在我的前面沖過了終點線。”
????小兔說:“我的名次排在小猴的前面,小狗的后面。”
????請根據他們的回答排出名次。
解答:
#include?<stdio.h>int?main(int?argc,?char?**argv)
{//小狗、小兔、小貓、小猴、小鹿分別定義為a,b,c,d,eunsigned?int?a,?b,?c,?d,?e;for(a?=?1;?a?<=?5;?a++){for(b?=?1;?b?<=?5;?b++){if(a?==?b)continue;for(c?=?1;?c?<=?5;?c++){if(a?==?c?||?b?==?c)continue;for(d?=?1;?d?<=?5;?d++){if(a?==?d?||?b?==?d?||?c?==?d)continue;e?=?15?-a?-b?-c?-d;if((d?<?c)?&&?(e?<?a)?&&?(b?<?d)?&&?(b?>?a)){printf("小狗?:%d\n",?a);printf("小兔?:%d\n",?b);printf("小貓?:%d\n",?c);printf("小猴?:%d\n",?d);printf("小鹿?:%d\n",?e);}}}}}return?0;
}
輸出結果:
小狗 :2
小兔 :3
小貓 :5
小猴 :4
小鹿 :1
3、甲、乙、丙、丁四人參加一次數學競賽。賽后,他們四人預測名次的談話如下:
?甲說:“丙得第一,我第三名”;
????乙說:“我第一名,丁第四名”;
????丙說:“丁第二名,我第三名”;
????丁沒說話。
????當最后結果公布時發現,甲乙丙都只說對了一半,請給出正確的四人名次。
解答:
#include?<stdio.h>int?main(int?argc,?char?**argv)
{//甲乙丙丁分別為a,b,c,dunsigned?int?a,b,c,d;//a為1-4時for(a?=?0;?a?<=?4;?a++){for(b?=?0;?b?<=?4;?b++){for(c?=?0;?c?<=?4;?c++){for(d?=?0;?d?<=?4;?d++){if(a?+?b?+?c?+?d?==?10){//a,b,c,d的值不能相同if(a?==?b?||?a?==?c?||?a?==?d?||?b?==?c?||?b?==?d?||?c?==?d)continue;if(((c?==?1)+(a?==?3)?==?1)?&&?((b?==?1)+(d?==?4)?==?1)?&&?((d?==?2)+(c?==?3)?==?1)){printf("a?is?%d\n",?a);printf("b?is?%d\n",?b);printf("c?is?%d\n",?c);printf("d?is?%d\n",?d);}}}}}}return?0;
}
輸出結果:
a is 3
b is 1
c is 4
d is 2
邏輯推理題的解題思路一般采用多重循環,窮舉所有的可能情況,將給出的條件轉換為C語言中的邏輯判斷表達式,打印出符合條件的選項。
轉載于:https://blog.51cto.com/9291927/1830485