问题描述:
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
思路:
根据题目,我们可先自行推算出比赛结果:
对A选手入手分析:假设B第二是真,则B选手说的E第四为假,故根据E选手所说A为第一为真,进而C选手所说D第二为真,即D选手所说C最后为真,这样推出的结果为:A第一,B第二,C第五,D第二,E不确定
以上推论的结果显然不正确,故可知A所说他第三为真;根据这一条件,推算出的结果为:
A第三,B第一,C第五,D第二,E第四
代码:
#include"day.h"
void game()
{
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
for(a=1;a<=5;a++)
{
for(b=1;b<=5;b++)
{
if(a!=b)
{
//排除并列情况,a和b不为同一排名
for(c=1;c<=5;c++)
{
if(a!=c && b!=c)
{
for(d=1;d<=5;d++)
{
if(a!=d && b!=d && c!=d)
{
for(e=1;e<=5;e++)
{
if(a!=e && b!=e && c!=e && d!=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))
{
printf("a:%d b:%d c:%d d:%d e:%d\n",a,b,c,d,e);
}
}
}
}
}
}
}
}
}
}
}