#include<stdio.h>
int main()
int a,b,c,d,e,c1,c2,c3,c4,c5;
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++)
{
c1=(b==2)+(a==3)==1;
c2=(b==2)+(e==4)==1;
c3=(c==1)+(d==2)==1;
c4=(c==5)+(d==3)==1;
c5=(e==4)+(a==1)==1;
if(c1+c2+c3+c4+c5==5&&a+b+c+d+e==15&&a*b*c*d*e==120)
{
printf("A:%d\nB:%d\nC:%d\nD:%d\nE:%d\n",a,b,c,d,e);
return 0;
}
}
}
}
}
}
}
运行结果:A:3
B:1
C:5
D:2
E:4
解析:五个人,每个人说的话都是对一半,故我们可以采用5*5的循坏结构,也就是for循坏这个结构。c1=(b==2)+(a==3)==1这个结构主要用来表示每个人说的话都是对一半,表示b假如为第二名,a就不是第三名,(b==2)的判断值为1,(a==3)的判断值为0,相加总是为为1.名次有1,2,3,4,5名,名次之和 为15,名次之积为120,这两个条件必不可少,没有这两个条件的话,程序无法对名次进行筛选,因此会造成有重复的排名。