习题

xiaoxiao2022-06-12  35

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 解 :看到这个问题想到的是

看到这个问题首先想到的是判断条件,每个人一半正确就意味着运用逻辑或运算,所以首先可以能会想到

if((b==2||a==3)&&(b==2||e==4)&&(c==1&&d==2)&&(c==5||d==3)&&(e==4||a==1))

然而通过编译发现这样做并不行,可能是运算符优先级问题所以改成

if ((2 == b && 3 != a) || (2 != b && 3 == a) == 1) { if ((2 == b && 4 != e) || (2 != b && 4 == e) == 1) { if ((1 == c && 2 != d) || (1 != c && 2 == d) == 1) { if ((5 == c && 3 != d) || (5 != c && 3 == d) == 1) { if ((4 == e && 1 != a) || (4 != e && 1 == a) == 1) } } } }

把每一个小的判断单独做一个if语句来判断 但此时abcde都是从1到5的一个数值,所以abcde有可能重复,所以再加一个判断

if (((a != b) && (a != c) && (a != d) && (a != e)) && ((b != c) && (b != d) && (b != e)) && ((c != d) && (c != e)) && ((d != e)))

最后是完整代码

#include<stdio.h> int main() { int a = 0, b = 0, c = 0, d = 0, e = 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++) { for (e = 1; e <= 5; e++) { if ((2 == b && 3 != a) || (2 != b && 3 == a) == 1) { if ((2 == b && 4 != e) || (2 != b && 4 == e) == 1) { if ((1 == c && 2 != d) || (1 != c && 2 == d) == 1) { if ((5 == c && 3 != d) || (5 != c && 3 == d) == 1) { if ((4 == e && 1 != a) || (4 != e && 1 == 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); } } } } } } } } } } }
转载请注明原文地址: https://www.6miu.com/read-4932743.html

最新回复(0)