5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
名次唯一性,按照一半对的条件遍历所有选手说的情况,所有名次不相同!
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, c, d, e;
//每个人的名次都有五种可能
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 ((b == 2 && a != 3) || (b != 2 && a == 3))
{
if ((b == 2 && e != 4) || (b != 2 && e == 4))
{
if ((c == 1 && d != 2) || (c != 1 && d == 2))
{
if ((c == 5 && d != 3) || (c != 5 && d == 3))
{
if ((e == 4 && a != 1) || (e != 4 && a == 1))
{
//a,b,c,d,e五个值均不相同
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);
}
}
}
}
}
}
}
}
}
}
}
system("pause");
return 0;
}