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