嵌入式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語言中的邏輯判斷表達式,打印出符合條件的選項。