用编程思维做逻辑题

1.猜名次

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,编程确定比赛的名次。

思路:

1.计算机无法进行逻辑上的识别,因此需要遍历全部可能产生的名次,总共有五名选手,所以使用五个for循环嵌套遍历。

2.在遍历完所有可能性之后,查看限制条件:比赛结束后,每位选手都说对了一半!针对A的话来说:B第二或者自己第三,因此(B=2)+(A=3)=1,同理我们可以写出其他四位选手的条件。并且每位选手的排名都不一样,也就是说:A*B*C*D*E=1*2*3*4*5=120.

代码如下:

int main()
{
	//五次循环遍历找出所有排名的可能性,判断满足条件用if语句
	for (int a = 1; a <= 5; a++)
	{
		for (int b = 1; b <= 5; b++)
		{
			for (int c = 1; c <= 5; c++)
			{
				for (int d = 1; d <= 5; d++)
				{
					for (int e = 1; e <= 5; e++)
					{
						//都说对一半,即加和为1
						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&&
							a*b*c*d*e==120)
						{
						printf("a:%d b:%d c:%d d:%d e:%d\n", a, b, c, d, e);
						}
					}
				}
			}
		}
	}
	return 0;

2.猜凶手

某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

思路:

1.A,B,C,D四人都有可能是凶手,因此用一个for循环逐个排查一遍

2.限制条件:3个人说了真话,1个人说的是假话。说真话为1,说假话为0,因此将四个人所说的话合并作为一个if语句进行判断,当遍历到某人时,四者相加为3,则此人为凶手。

代码如下:

int main()
{
	char kill = 'A';//假定为A
	for (kill = 'A'; kill <= 'D'; kill++)
	{
			if ((kill != 'A') + (kill == 'C') +( kill == 'D') +( kill != 'D') == 3)//三人为真,一人为假
			break;
	}
	printf("%c\n", kill);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值