蓝桥杯-算法提高-凶手 断案
2018-3-22
問(wèn)題描述
巴斯維克命案抓住了六個(gè)嫌疑犯,他們的口供如下:
A:我不是罪犯
B:A、C中有一個(gè)是罪犯
C:A和B說(shuō)了假話
D:C和F說(shuō)了假話
E:其他五個(gè)人中,只有A和D說(shuō)了真話
F:我是罪犯
他們中只有一半說(shuō)了真話,兇手只有一個(gè)。
本題可能有多種可能性,即正確答案(找到唯一的兇手)可能有多個(gè),但每一個(gè)可能的答案(某一個(gè)是兇手)都滿足上述口供。
請(qǐng)編程找出可能的兇手輸出。
樣例:(假設(shè)唯一的兇手是A或者D或者E,則輸出結(jié)果為三行,按字母順序依次輸出)
A
D
E
如果我沒(méi)有記錯(cuò)的話,我們的老師講這種邏輯推理題已經(jīng)不知道講了多少遍了。
因?yàn)槲覀兊膬词种挥幸粋€(gè),那么我們?nèi)我饧僭O(shè)某一個(gè)人為兇手,此時(shí)每個(gè)人說(shuō)的話就會(huì)有一個(gè)對(duì)否的邏輯了,由于題目告訴我們有一半的人說(shuō)了真話,只要保證我們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;//表示當(dāng)前第i個(gè)是兇手 if (A()+B()+C()+D()+E()+F()==3) printf ("%c\n",'A'+i);}return 0; }問(wèn)題描述
公安人員審問(wèn)甲、乙、丙、丁四個(gè)嫌疑犯,已確知,這四個(gè)人當(dāng)中僅有一人是偷竊者,還知道這四個(gè)人的答話,要么完全誠(chéng)實(shí),要么完全說(shuō)謊。在回答公安人員的問(wèn)話中:
甲說(shuō):“乙沒(méi)有偷,是丁偷的?!?
乙說(shuō):“我沒(méi)有偷,是丙偷的?!?
丙說(shuō):“甲沒(méi)有偷,是乙偷的?!?
丁說(shuō):“我沒(méi)有偷,我用的那東西是我家里的?!?
請(qǐng)根據(jù)上述四人答話,判斷誰(shuí)是偷竊者。
輸入格式:無(wú)輸入。
輸出格式:輸出一個(gè)字符,表示偷竊者是誰(shuí),A表示甲,B表示乙,C表示丙,D表示丁。
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯-算法提高-凶手 断案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jar打包命令使用
- 下一篇: 关于Apahce服务器安装中遇到的问题