1. 程式人生 > >用C語言來根據運動員的描述判斷他們的名次

用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;
}

看著程式碼,我們很容易就理解了。