1. 程式人生 > >高臺跳水比賽結果程式預測

高臺跳水比賽結果程式預測

1。五位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果
A選手說:B第二,我第三;
B選手說:我第二,E第四;
C選手說:我第一,D第二;
D選手說:C最後,我第三;
E選手說:我第四,A第一;
比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。

假設A的第一句話是真的,那麼B是第二為真,那麼B所說的E第四必為假,E所說的A第一則為真,C所說的我第一必為假,D第二為真,於初始假設矛盾,pass。

假設A的第二句話是真的,那麼B第二為假,A第三為真,B所說我第二為假,E第四為真,E所說我第四為真,A第一為假,D所說C最後為真,我第三為假,C所說我第一為假,D第二為真。則排名為
A3 E4 C5 D2 B1
這是我們自己人腦推理出來的,那麼如何用電腦實現呢?
首先,A B C D E五位選手都可能獲得第1~5名,但是,實際結果必須要滿足如上條件的約束,且名次不能重複。所以我們可以用五個for迴圈去模擬五個人的名次,然後用這些條件去篩出滿足的答案,最後輸出即可。
具體程式碼如下

#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int e = 0;
	for (a = 1; a < 6; a++)
	{
		for (b = 1; b < 6; b++)
		{
			for (c = 1; c < 6; c++)
			{
				for (d = 1; d < 6;d++)
				{
					for (e = 1; e < 6;e++)
					{
						if (a != b && a != c && a != d && a != e &&
							b != c && b != d && b != e && c != d &&
							 c != e && d != e)
						{
							if (((b == 2 && a != 3)||(b != 2 && a == 3) == 1)
								&&((b == 2 && e != 4) || (b != 2 && e == 4) == 1)
								&&((c == 1 && d != 2) || (c != 1 && d == 2) == 1)
								&&((c == 5 && d != 3) || (c != 5 && d == 3) == 1)
								&&((e == 4 && a != 1) || (e != 4 && a == 1) == 1))
							{
								printf(" a = %d\n b = %d\n c = %d\n d = %d\n e = %d\n",
									a,b,c,d,e);
							}
					    }
					}
				}
			}
		}
	}
system("pause");
}

結果如下
在這裡插入圖片描述