题目描述:
5 位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
解题思路:
通过对题目的阅读后,我们知道 每个人的名次可能是 1 ~ 5 的一个。
所以:
(1)首先我们可以通过 一 一 列举的办法,将每个人的 名次 列出来;
(2)然后进行判断是否满足题目说的 “每位选手都说对了一半”的条件;
(3) 最后还要加上每个人只能有一个名次,即(a * b * c * d * e) == 120
(4) 从而 得到每个人比赛最终的名次 。
代码如下(示例):
#include<stdio.h>
int main()
{
//定义五个整型变量,用于存放 5个运动员的名次
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
//把 a b c d e 五个人可能出现的每次进行 一 一列举出来
for (int a = 1; a <= 5; a++)
{
for (int b = 1; b <= 5; b++)
{
for (int c = 1; c <= 5; c++)
{
for (int d = 1; d <= 5; d++)
{
for (int e = 1; e <= 5; e++)
{
//判断是否满足下面的判断条件
if ( ((b == 2) + (a == 3) == 1)&&
((b == 2) + (e == 4) == 1)&&
((c == 1) + (d == 2) == 1)&&
((c == 5) + (d == 3) == 1)&&
((a == 1) + (e == 4) == 1)&&
((a * b * c * d * e) == 120)
)
{
//输出名次
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);
printf("d = %d\n", d);
printf("e = %d\n", e);
}
}
}
}
}
}
return 0;
}