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

 题目: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);
						}
					}
				}
			}
		}
	}
}



运行结果:










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值