用C語言來根據運動員的描述判斷他們的名次
邏輯推理題的原題描述是這樣的:
5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果
A選手說:B第二,我第三;
B選手說:我第二,E第四;
C選手說:我第一,D第二;
D選手說:C最後,我第三;
E選手說:我第四,A第一;
比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。
分析:
1.首先我們定義五個變數來代表這五個選手:a,b,c,d,e 我們可以確定的是每個運動員的名次都有五種情況,都是1,2,3,4,5。
我們就可以以他們的值來代替他們的名次
2.用程式設計師的邏輯思維來分析這五個人的描述:
每個選手都說了兩句話,每句話都說對了一半,那麼每個人都有兩種情況,前真後假 或者 前假後真,而每個選手的話都是同時成立的,所以是邏輯與
((b == 2) && (a != 3)) || ((b != 2) && (a ==3))
((b == 2) && (e != 4)) || ((b != 2) && (e ==4))
((c == 1) && (d != 2)) || ((c != 1) && (d==2))
((c == 5) && (d != 3)) || ((c != 5) && (d==3))
((e == 4) && (a != 1)) || ((e != 4) && (a==1))
所以當以上的描述同時成立時,即a,b,c,d,e都有一個值
3.用for迴圈來判斷他們的名次,寫完程式碼後,我們忽略一個問題,那就是他們的名次不能相同,即他們的取值不能相同,在多加一個if條件。
完整程式碼如下所示
#include <stdio.h> #include <stdlib.h> int main() { int a, b, c, d, e; for (int a = 1; a <= 5; a++) { for (int b = 1; b <= 5; b ++ ) { for (int c = 1; c <= 5; c++) { for (int d = 1; d <= 5; d++) { for (int e = 1; e <= 5; e++) { if ((((b == 2) && (a != 3)) || ((b != 2) && (a == 3))) && (((b == 2) && (e != 4)) || ((b != 2) && (e == 4))) && (((c == 1) && (d != 2)) || ((c != 1) && (d == 2))) && (((c == 5) && (d != 3)) || ((c != 5) && (d == 3))) && (((e == 4) && (a != 1)) || ((e != 4) && (a == 1)))) { if (a != b && a != c && a != d && a != e && b != c && b != d && b != e && c != d && c != e && d != e) { printf("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e); printf("A的名次是%d\n", a); printf("B的名次是%d\n", b); printf("C的名次是%d\n", c); printf("D的名次是%d\n", d); printf("E的名次是%d\n", d); } } } } } } } system("pause"); return 0; }
看著程式碼,我們很容易就理解了。