问题描述:
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
问题分析:
每人说对了一半可以表述如下:
A说:(B == 2) + (A == 3) == 1
B说:(B == 2) + (E == 4) == 1
C说:(C == 1) + (D == 2) == 1
D说:(C == 5) + (D == 3) == 1
E说:(E == 4) + (A == 1) == 1)
这样会输出很多种可能性,我们需要加上约束条件:
A * B * C * D * E == 120(每个人一个名次,乘起来应该是120)
源代码:
#include <stdio.h>
#include <windows.h>
void main()
{
int A, B, C, D, E;
for (A = 1; A < 6; A++)
{
for (B = 1; B < 6; B++)
{
for (C = 1; C < 6; C++)
{
for (D = 1; D < 6; D++)
{
for (E = 1; E < 6; E++)
{
if ((((B == 2) + (A == 3) == 1)
&& ((B == 2) + (E == 4) == 1)
&& ((C == 1) + (D == 2) == 1)
&& ((C == 5) + (D == 3) == 1)
&& ((E == 4) + (A == 1) == 1))
&& (A * B * C * D * E == 120))
{
printf("A= %d\nB= %d\nC= %d\nD= %d\nE= %d\n", A, B, C, D, E);
}
}
}
}
}
}
system("pause");
return 0;
}
小结:
要善于将汉语表述转换为机器语言,为之勤加练习吧!