邏輯推理典例 根據資訊排名次

2021-08-31 13:44:24 字數 1663 閱讀 2705

5位運動員參加了10公尺臺跳水比賽,有人讓他們**比賽結果

a選手說:b第二,我第三;

b選手說:我第二,e第四;

c選手說:我第一,d第二;

d選手說:c最後,我第三;

e選手說:我第四,a第一;

比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次

例如對於a選手,我們如何判斷他說對了一半?

有人會立馬想到:

if ( b == 2 || a== 3)

這無疑是有漏洞的:b==2和a==3都成立這條件也為真,然而題目只需要有且只能說對一半;

然後會有人想到:if ( (b == 2 || a== 3) == 1  && (b == 2 && a== 3)==0 )

對,這能滿足題目的需求,達到只能說對一半的要求,但這樣寫是否過於複雜了?

下面介紹一種最優的解法:

if((b == 2) + (a == 3) == 1)

;

1.a、b、c、d、e的名次為  1,2,3,4,5;

2.a、b、c、d、e的名次為  1,1,3,4,5;

3.a、b、c、d、e的名次為  1,1,2,3,2;

4.a、b、c、d、e的名次為  1,3,3,4,5;

其中哪些排名是不可能的呢?

2和4的排名是不可能出現的。生活實際中,排名是可以重疊的(兩個或多個並列乙個名次),但不能跨級,意思是,有第一名,沒第二名,卻有第三名,這樣的情況你在生活實際中遇到過嗎?肯定是不可能的

所以,我們在判斷排名是否合格時要排除跨級的這種情況。

那麼難點來了,如何判斷這五個人的排名是否跨級了

解法:我們將這五個人的名次都放到 flag 變數(初始化為零)的位元位中,如果出現第一名,就讓第乙個位元位(從右往左)置一,如果出現了第二名,就讓第二個位元位置一,.......然後我們來判斷flag從右往左如果位元位之間有零,則不符合要求(即位元位從右往左不能出現1 0 1 這種序列

下面呈上原始碼:

#include/*5位運動員參加了10公尺臺跳水比賽,有人讓他們**比賽結果

a選手說:b第二,我第三;

b選手說:我第二,e第四;

c選手說:我第一,d第二;

d選手說:c最後,我第三;

e選手說:我第四,a第一;

比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。 */

//注意:續航符打出後需直接回車,然後再寫**,回車前回車會不能有空格,否則就會有警告

//注意:續航符後面不能加注釋,否則直接報錯

int main()

if (flag == 0)}}

return 0;

}

培養邏輯推理

沒有解決不了的問題,只有打不開的思路。思維一旦被限制,動再多的腦筋也跳不出固有的圈子 思路一經調換,難題往往便迎刃而解 類似數學推理我們重點關注兩點 一 盡可能多的發現屬性,現象 1 靜態的 一般擺在我們面前的我們都能注意到,但是 涉案現場的任何小細節我們都要去問為什麼,不要放過任何乙個細節背後的原...

做邏輯推理

做邏輯推理 進行邏輯推理有什麼用呢?其實是為了訓練我們的邏輯感強,思維縝密,做事周到的能力。下面是matrix67創作的下面 10 個邏輯推理問題。在每個問題中,甲 乙 丙三人各說了一句話,你需要判斷出每個人說的究竟是真話還是假話。每個問題都有唯一解。注意,與傳統的邏輯推理題 目不同,沒有任何條件告...

黑與白(邏輯推理)

黑與白 有 a b c d e 這 5 個人,每個人額頭上都貼了一張黑或白的紙。5 人對坐,每個人都可以看到其他人額頭上紙的顏色。5 人相互觀察後,a 說 我看見有 3 人額頭上貼的是白紙,1 人額頭上貼的是黑紙。b 說 我看見其他 4 人額頭上貼的都是黑紙 c 說 我看見 1 人額頭上貼的是白紙,...