逻辑题:确定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);
}
}
}
}
}
}
}
运行结果:
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);
}
}
}
}
}
}
}
运行结果:
相关文章推荐
- c语言:2种方法:5位运动员参加跳水比赛,每位选手都说对一半,请确定比赛名次
- 5位运动员参加了10米台跳水比赛,每位选手都说对了一半,请编程确定比赛的名次
- 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 确定比赛的名次
- 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果,比赛结束后,每位选手都说对了一半,请编程确定比赛的名次
- c语言:2种方法:5位运动员参加跳水比赛,每位选手都说对一半,请确定比赛名次
- 5位运动员参加10米台跳水比赛,对他们名次做出预测。
- HDU 1285 确定比赛名次
- hdu 1285 确定比赛名次
- Hdu oj 1285 确定比赛名次(拓扑排序)
- C语言:5位运动员每人说了两句话,均有一句话正确,预测比赛结果
- hdu1285 确定比赛名次(拓扑排序)
- HUD1285 确定比赛名次 拓扑排序
- HDU 1285 确定比赛名次【拓扑排序】
- HDU 1285 确定比赛名次 拓扑排序模板题
- 拓扑排序(Topological Order 基础篇)—— 确定比赛名次 (HDU 1285 )
- HDU:1285 确定比赛名次(拓扑排序)
- hdu 1285 确定比赛名次 拓扑排序
- HDU 1285 确定比赛名次【拓扑】
- HDU 1285 确定比赛名次(拓扑排序)
- hdoj1285 确定比赛名次 (经典拓扑排序) 初学拓扑排序.做