小偷问题
題目:
警察局抓了a,b,c,d四名偷竊嫌疑犯,當中只有一個是小偷,審問結果如下:
a說:“我不是小偷。”
b說:“c是小偷。”
c說:“小偷肯定是d。
d說:“c在冤枉人。”
現在已經知道4個人中3人說的是真話,一個說的是假話,那么誰是小偷?
?
?
?
分析:
如果不用代碼,讓讀者硬做這題的話,思路往往是一個個假設過去,如假設a是小偷,然后判斷4個人的話是不是3真1假。
用程序判斷真假很簡單,但如何記錄真假的個數呢,這里用到一個技巧,就是“邏輯和”,利用C語言中,Ture為1,False為0來做。
這個算法實質上是模擬了人的思考方式。
?
算法:
for(int x =1;x<=4;i++)
{
if((x!=1)+(x==3)+(x==4)+(x!=4)==3)
{
print(chr(64+x),"是小偷。");
break;
}
}
警察局抓了a,b,c,d四名偷竊嫌疑犯,當中只有一個是小偷,審問結果如下:
a說:“我不是小偷。”
b說:“c是小偷。”
c說:“小偷肯定是d。
d說:“c在冤枉人。”
現在已經知道4個人中3人說的是真話,一個說的是假話,那么誰是小偷?
?
?
?
分析:
如果不用代碼,讓讀者硬做這題的話,思路往往是一個個假設過去,如假設a是小偷,然后判斷4個人的話是不是3真1假。
用程序判斷真假很簡單,但如何記錄真假的個數呢,這里用到一個技巧,就是“邏輯和”,利用C語言中,Ture為1,False為0來做。
這個算法實質上是模擬了人的思考方式。
?
算法:
for(int x =1;x<=4;i++)
{
if((x!=1)+(x==3)+(x==4)+(x!=4)==3)
{
print(chr(64+x),"是小偷。");
break;
}
}
總結
- 上一篇: 你对锁的理解?如何手动模拟一个死锁?
- 下一篇: ff6全部青魔法获得(不走兽之原)