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 (((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)
{
if (a*b*c*d*e == 1 * 2 * 3 * 4 * 5)
{
printf("a=%d,b=%d,c=%d,d=%d,e=%d", a, b, c, d, e);
}
}
}
}
}
}
}
return 0;
}
核心思想是穷举法
把所有的可能性都列举出来,然后进行判断
题上说每个人都说对了一半,说明两个条件一个为真(1)一个为假(0),所以两个判断相加得到1就说明一个为真一个为假。
(b == 2)+ (a == 3) == 1
以此类推每个人的条件和都为1的时候即为正确
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)
需注意,每个数字不能重复
if (a*b*c*d*e == 1 * 2 * 3 * 4 * 5)
所以我们需要借助乘积来判断