用C语言来根据运动员的描述判断他们的名次

逻辑推理题的原题描述是这样的:

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
        A选手说:B第二,我第三;
        B选手说:我第二,E第四;
        C选手说:我第一,D第二;
        D选手说:C最后,我第三;
        E选手说:我第四,A第一;
        比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

分析:

1.首先我们定义五个变量来代表这五个选手:a,b,c,d,e    我们可以确定的是每个运动员的名次都有五种情况,都是1,2,3,4,5。

我们就可以以他们的值来代替他们的名次

2.用程序员的逻辑思维来分析这五个人的描述:

每个选手都说了两句话,每句话都说对了一半,那么每个人都有两种情况,前真后假 或者 前假后真,而每个选手的话都是同时成立的,所以是逻辑与

    ((b == 2) && (a != 3)) || ((b != 2) && (a ==3))
    ((b == 2) && (e != 4)) || ((b != 2) && (e ==4))
    ((c == 1) && (d != 2)) || ((c != 1) && (d==2))
    ((c == 5) && (d != 3)) || ((c != 5) && (d==3))
    ((e == 4) && (a != 1)) || ((e != 4) && (a==1))

所以当以上的描述同时成立时,即a,b,c,d,e都有一个值

3.用for循环来判断他们的名次,写完代码后,我们忽略一个问题,那就是他们的名次不能相同,即他们的取值不能相同,在多加一个if条件。

完整代码如下所示

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a, b, c, d, e;
	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++)
					{
						if ((((b == 2) && (a != 3)) || ((b != 2) && (a == 3)))
							&& (((b == 2) && (e != 4)) || ((b != 2) && (e == 4)))
							&& (((c == 1) && (d != 2)) || ((c != 1) && (d == 2)))
							&& (((c == 5) && (d != 3)) || ((c != 5) && (d == 3)))
							&& (((e == 4) && (a != 1)) || ((e != 4) && (a == 1))))
						{
							if (a != b && a != c && a != d && a != e && b != c && b != d && b != e && c != d && c != e && d != e)
							{
								printf("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
								printf("A的名次是%d\n", a);
								printf("B的名次是%d\n", b);
								printf("C的名次是%d\n", c);
								printf("D的名次是%d\n", d);
								printf("E的名次是%d\n", d);
							}
						}
					}
				}
			}
		}
	}
     system("pause");
     return 0;
}

看着代码,我们很容易就理解了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值