蓝桥杯-算法提高-凶手 断案
2018-3-22
問題描述
巴斯維克命案抓住了六個嫌疑犯,他們的口供如下:
A:我不是罪犯
B:A、C中有一個是罪犯
C:A和B說了假話
D:C和F說了假話
E:其他五個人中,只有A和D說了真話
F:我是罪犯
他們中只有一半說了真話,兇手只有一個。
本題可能有多種可能性,即正確答案(找到唯一的兇手)可能有多個,但每一個可能的答案(某一個是兇手)都滿足上述口供。
請編程找出可能的兇手輸出。
樣例:(假設唯一的兇手是A或者D或者E,則輸出結果為三行,按字母順序依次輸出)
A
D
E
如果我沒有記錯的話,我們的老師講這種邏輯推理題已經不知道講了多少遍了。
因為我們的兇手只有一個,那么我們任意假設某一個人為兇手,此時每個人說的話就會有一個對否的邏輯了,由于題目告訴我們有一半的人說了真話,只要保證我們1的值為3就可以了。
#include<iostream> #include<cstring> #include<cstdio> using namespace std;const int N = 6; int x[N+1];bool A(){if (!x[0]) return 1;return 0; }bool B(){if (x[0]||x[2]) return 1;return 0; }bool C(){if (!A()&&!B()) return 1;return 0; }bool F(){if (x[5]) return 1;return 0; }bool D(){if (!C()&&!F()) return 1;return 0; }bool E(){if (A()&&D()&&!B()&&!C()&&!F()) return 1;return 0; }int main(){for (int i=0;i<6;i++){memset(x,0,sizeof(x));x[i]=1;//表示當前第i個是兇手 if (A()+B()+C()+D()+E()+F()==3) printf ("%c\n",'A'+i);}return 0; }問題描述
公安人員審問甲、乙、丙、丁四個嫌疑犯,已確知,這四個人當中僅有一人是偷竊者,還知道這四個人的答話,要么完全誠實,要么完全說謊。在回答公安人員的問話中:
甲說:“乙沒有偷,是丁偷的?!?
乙說:“我沒有偷,是丙偷的?!?
丙說:“甲沒有偷,是乙偷的?!?
丁說:“我沒有偷,我用的那東西是我家里的?!?
請根據上述四人答話,判斷誰是偷竊者。
輸入格式:無輸入。
輸出格式:輸出一個字符,表示偷竊者是誰,A表示甲,B表示乙,C表示丙,D表示丁。
總結
以上是生活随笔為你收集整理的蓝桥杯-算法提高-凶手 断案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jar打包命令使用
- 下一篇: 如何用Python进行大数据挖掘和分析