先用for循环遍历各种情况。
a,b,c,d,e所获的所有可能的名次。
根据a,b,c,d,e的名次乘积一定是120,把重复的名次去掉。
然后根据a,b,c,d,e所说的话进行判断,因每个人说话只有一半是对的,进行判断。
此环境在vs底下运行:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
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 (120 == a*b*c*d*e)
{
if (b == 2 && a != 3 || a == 3 && b != 2)
{
if (b == 2 && e != 4 || b != 2 && e == 4)
{
if (c == 1 && d != 2 || d == 2 && c != 1)
{
if (c == 5 && d != 3 || c != 5 && d == 3)
{
if (e == 4 && a != 1 || a == 1 && e != 4)
{
printf("a=%d b=%d c=%d d=%d e=%d", a, b, c, d, e);
}
}
}
}
}
}
}
}
}
}
}
}