看程序員是如何做 “2018年刑偵科推理試題” 的

hello

各位小伙伴

最近過的怎么樣

有沒有按時吃飯,睡覺,敲代碼

一定要照顧好自己呀~

不知道大家前段時間,有沒有在朋友圈中收到一份,『2018的刑偵科目推理試題』娜娜偶然在朋友圈中看到過一次~

原圖奉上,沒有看過的小伙伴可以仔細的看一下哈~

我看到第一題的反應是

題呢?你到給我題呀~連題都不給我~我怎么知道答案~

看到第二題我的腦袋已經(jīng)無法思考一片空白了~

這尼瑪是什么玩意兒,簡直就是一個坑啊,然后我就放棄了。

但是最近我看到各路大神對這道題進行了解答,我才意識到,原來看似這么不正經(jīng)的題其實是有很正經(jīng)的答案的~

娜娜~不禁想問,這的死多少腦細胞才能做出這樣的推理題~看來我那900+多集的柯南是白看了~

python語言實現(xiàn)

運行結果:

c++語言實現(xiàn)

C語言實現(xiàn):

一上來就是兩發(fā),下面代碼是精簡后的代碼。

Java語言實現(xiàn)

for(inti =0; i <10; i++){

System.out.println((i+1) +":"+ questions[i]);

}

}

}

}

}

}

}

}

}

}

}

}

}

/**

* 判斷每個答案是否符合題意

* 為了方便 questions 數(shù)組中從 0 開始,

* 題目比數(shù)組角標多 1(不要問為什么, 奏是這么開)

* 比如 question[0] 的值表示第 1 題答案

**/

staticbooleanisEnd(int[] questions){

// 第二題, 第 5 題的答案是

switch(questions[4]){

case1:

// 如果第 5 題答案是 A, 判斷第 2 題答案是不是 C 不是返回 false, 是繼續(xù)

if(questions[1] !=3)

returnfalse;

break;

case2:

// 原理同上

if(questions[1] !=4)

returnfalse;

break;

case3:

// 原理同上

if(questions[1] !=1)

returnfalse;

break;

case4:

// 原理同上

if(questions[1] !=2)

returnfalse;

break;

}

// 第 3 題, 以下選項中哪一題的答案與其他三項不同

switch(questions[2]){

case1:

if(!(questions[2]!=questions[5] && questions[5]==questions[1] && questions[1] ==

questions[3]))

returnfalse;

break;

case2:

if(!(questions[5]!=questions[2] && questions[2]==questions[1] && questions[1] ==

questions[3]))

returnfalse;

break;

case3:

if(!(questions[1]!=questions[5] && questions[2]==questions[5] && questions[5] ==

questions[3]))

returnfalse;

break;

case4:

if(!(questions[3]!=questions[5] && questions[5]==questions[1] && questions[1] ==

questions[2]))

returnfalse;

break;

}

// 第 4 題, 以下選項中那兩題的答案相同

switch(questions[3]){

case1:{

// 判斷第 1 題與第 5 題答案是否相同

if(questions[0] != questions[4]){

returnfalse;

}

break;

}

case2:{

// 原理同上

if(questions[1] != questions[6]){

returnfalse;

}

break;

}

case3:{

// 原理同上

if(questions[0] != questions[8]){

returnfalse;

}

break;

}

case4:{

// 原理同上

if(questions[5] != questions[9]){

returnfalse;

}

break;

}

}

// 第 5 題, 以下選項中哪一題的答案與本題相同

switch(questions[4]){

case1:

// 判斷第 8 題答案是否是 A

if(questions[7] !=1)

returnfalse;

break;

case2:

// 原理同上

if(questions[3] !=2)

returnfalse;

break;

case3:

// 原理同上

if(questions[8] !=3)

returnfalse;

case4:

// 原理同上

if(questions[6] !=4)

returnfalse;

break;

}

// 第 6 題, 以下選項中哪兩題的答案與第 8 題相同

switch(questions[5]){

case1:

// 判斷第 14 題答案是否與第 8 題答案相同

if(questions[1] != questions[7] || questions[4] != questions[7])

returnfalse;

break;

case2:

// 原理同上

if(questions[0] != questions[7] || questions[5] != questions[7])

returnfalse;

break;

case3:

// 原理同上

if(questions[2] != questions[7] || questions[9] != questions[7])

returnfalse;

break;

case4:

// 原理同上

if(questions[4] != questions[7] || questions[8] != questions[7])

returnfalse;

break;

}

// 由于第 710 題問題是同類型的, 所以一塊計算 start

int[] check10 =newint[5];

// 把每個題的答案 (1234) 作為新數(shù)組下表, value++ 計算出現(xiàn)次數(shù)

for(inti=0;i < questions.length;i++){

check10[questions[i]]++;

}

// 出現(xiàn)最少與最多選項的次數(shù)初始化為 A 的次數(shù)

intlow = check10[1];

intlonger = check10[1];

// 出現(xiàn)最少的選項, 初始化為 A

intlowA =1;

// 最少與最多次數(shù)的選項相關計算

for(inti=1;i<5;i++) {

if(check10[i] >0&& check10[i] < low){

low = check10[i];

lowA = i;

}

if(check10[i] > longer){

longer = check10[i];

}

}

// 第 7 題, 在此十道題中, 被選中次數(shù)最少的選項字母為

switch(questions[6]){

case1:

// 判斷才出現(xiàn)最少的字母是否為 C

if(lowA !=3)

returnfalse;

break;

case2:

// 原理同上

if(lowA !=2)

returnfalse;

break;

case3:

// 原理同上

if(lowA !=1)

returnfalse;

break;

case4:

// 原理同上

if(lowA !=4)

returnfalse;

break;

}

// 第 10 題, 在此 10 道題中, ABCD 四個字母出現(xiàn)次數(shù)最多與最少者的差為

// 最多次數(shù)與最少次數(shù)的差值

intt = longer-low;

switch(questions[9]){

case1:

// 判斷差值是否為 3

if(t !=3)

returnfalse;

break;

case2:

// 原理同上

if(t !=2)

returnfalse;

break;

case3:

// 原理同上

if(t !=4)

returnfalse;

break;

case4:

// 原理同上

if(t !=1)

returnfalse;

break;

}

// 第 710 題校驗 end

// 第 8 題, 以下選項中哪一題的答案與第 1 題的答案在字母中不相鄰

switch(questions[7]) {

case1:

// 判斷第 7 題與第一題答案差值絕對是是否為 1

if(Math.abs(questions[6] - questions[0]) ==1)

returnfalse;

break;

case2:

// 原理同上

if(Math.abs(questions[4] - questions[0]) ==1)

returnfalse;

break;

case3:

// 原理同上

if(Math.abs(questions[1] - questions[0]) ==1)

returnfalse;

break;

case4:

// 原理同上

if(Math.abs(questions[9] - questions[0]) ==1)

returnfalse;

break;

}

// 第 9 題, 已知第 1 題與第 6 題的答案相同與第 X 題與第 5 題的答案相同的真假性相反, 那么 X 為

// 判斷第 1 題與第 6 題的答案是否相同

boolean isOne = questions[0]==questions[5]?true:false;

switch(questions[8]){

case1:

if(isOne){

// 第 1 題與第 6 題相同, 第 6 題與第 5 題答案相同返回 false;

if(questions[5] == questions[4])

returnfalse;

}else{

// 第 1 題與第 6 題不相同, 第 6 題與第 5 題答案不相同返回 false;

if(questions[5] != questions[4])

returnfalse;

}

break;

case2:

// 原理同上

if(isOne){

if(questions[9] == questions[4])

returnfalse;

}else{

if(questions[9] != questions[4])

returnfalse;

}

break;

case3:

// 原理同上

if(isOne){

if(questions[1] == questions[4])

returnfalse;

}else{

if(questions[1] != questions[4])

returnfalse;

}

break;

case4:

// 原理同上

if(isOne){

if(questions[8] == questions[4])

returnfalse;

}else{

if(questions[8] != questions[4])

returnfalse;

}

break;

}

returntrue;

}

publicstaticvoidmain(String[] args){

answer();

}

看到上面的答案之后,娜娜躲在角落了瑟瑟發(fā)抖,大牛,不就是膝蓋嗎?我給還不行嗎?

然后我看到了下面這條信息,這一是道杭州學軍中學的推理社的招新題~招新題~

然后娜娜開始研究怎么把這道題解出來~

此時此刻娜娜

娜娜的心情就和外面的天氣一樣

當我以為這題沒有答案的時候

有人做出了答案

當我以為做答案的都是大牛的時候

有人說這是入門級的題

當我想著別人能做我也能做到的時候

發(fā)現(xiàn)自己竟然做不出來

各位小伙伴

開往幼兒園的班車就要發(fā)車了

沒做出來的小伙伴請上車

和娜娜一起回去學習

不要擔心

我一定會回來的~~~

學習Java的同學注意了?。?!學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群:253772578,我們一起學Java!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容