先用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);
}
}
}
}
}
}
}
}
}
}
}
}
解谜竞赛排名算法
本文介绍了一种通过遍历所有可能的名次组合来解决竞赛排名问题的算法。使用C语言实现,通过五层for循环遍历a、b、c、d、e五个选手的所有可能名次,并检查名次乘积是否为120,同时去除重复名次,再根据选手们话语中的一半真实性进行逻辑判断,找出正确的排名顺序。
494

被折叠的 条评论
为什么被折叠?



