跳水比賽名次問題
阿新 • • 發佈:2019-01-25
5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果
A選手說:B第二,我第三。
B選手說:我第二,E第四。
C選手說:我第一,D第二。
D選手說:C最後,我第三。
E選手說:我第四,A第一。
比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。
已知每位選手都說對了一半,那麼每位選手說的話轉換為邏輯表示式後邏輯或的結果為1.遍歷五位選手,他們說的話邏輯表示式結果相加為5,說明比賽名次已經確定。只需遍歷前四位選手,第五位選手的成績為a+b+c+d+e-a+b+c+d,即e=15-(a+b+c+d),可以減少一層迴圈。同時,如果abcde相乘的結果不等於120,一定不是正確結果,可以跳過本次迴圈。
程式碼如下
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, c, d, e;
int ta, tb, tc, td, te;
int t = 0;
for(a=1;a<=5;a++)
for (b = 1; b<=5; b++)
for (c = 1; c<=5; c++)
for (d = 1; d <= 5; d++)
{
e = 15 - (a + b + c + d);
if (a*b*c*d*e != 120)
continue;
ta = ((b == 2) + (a == 3)) == 1;
tb = ((b == 2) + (e == 4)) == 1;
tc = ((c == 1) + (d == 2)) == 1;
td = ((c == 5) + (d == 3)) == 1 ;
te = ((e == 4) + (a == 1)) == 1;
t = ta + tb + tc + td + te;
if (t == 5)
{
printf("a=%d\nb=%d\nc=%d\nd=%d\ne=%d\n", a, b, c, d, e);
goto end;
}
}
end:
system("pause");
return 0;
}