您的位置:首页 > 其它

逻辑题:确定5位运动员的比赛名次。

2018-03-10 09:45 176 查看
 题目:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第一,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
思路:A,B,C,D,E的比赛名次都有可能是第一名到第四名。所以用5个for循环,在for循环里,进行if条件判断,输出比赛名次。void Rank()
{
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==1)+(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);
}
}
}
}
}
}
}
运行结果:



进行过滤,将不满足条件的去掉。


void Rank()
{
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==1)+(a==3) == 1)
&&((b==2)+(e==4) == 1)
&&((c==1)+(d==2) == 1)
&&((c==5)+(d==3) == 1)
&&((e==4)+(a==1) == 1) )
{
int ret = 0;
ret |= (1<<(a-1));
ret |= (1<<(b-1));
ret |= (1<<(c-1));
ret |= (1<<(d-1));
ret |= (1<<(e-1));

while(ret != 0)
{
if(ret % 2 == 0)
{
break;
}
ret /= 2;
}

//当ret不等于0,则说明是从while跳出来的,就不输出,再次for循环
if(ret == 0)
printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
}
}
}
}
}
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  逻辑