习题

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

看到这个问题首先想到的是判断条件,每个人一半正确就意味着运用逻辑或运算,所以首先可以能会想到

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

然而通过编译发现这样做并不行,可能是运算符优先级问题所以改成

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

把每一个小的判断单独做一个if语句来判断
但此时abcde都是从1到5的一个数值,所以abcde有可能重复,所以再加一个判断

if (((a != b) && (a != c) && (a != d) && (a != e))
                                && ((b != c) && (b != d) && (b != e))
                                                && ((c != d) && (c != e))
                                                && ((d != e)))

最后是完整代码

#include<stdio.h>
int main()
{
    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 ((2 == b && 3 != a) || (2 != b && 3 == a) == 1)
                        {
                            if ((2 == b && 4 != e) || (2 != b && 4 == e) == 1)
                            {
                                if ((1 == c && 2 != d) || (1 != c && 2 == d) == 1)
                                {
                                    if ((5 == c && 3 != d) || (5 != c && 3 == d) == 1)
                                    {
                                        if ((4 == e && 1 != a) || (4 != e && 1 == 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);
                                            }
                                         }
                                    }
                               }
                         }
                     }
               }
           }
        }
     }
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值