1. 程式人生 > >跳水比賽名次問題

跳水比賽名次問題

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