带你刷 · C语言 | 猜名次

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

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

题目

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

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

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

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

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

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

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

输入描述:

输出描述:
输出为一行


解法

1. 确定思路

  • 首先,我们观察到选手名都是字符型,比赛名次是整型
  • 其次每个人说话都是对了一半,我们想到用真为1,假为0表示,那么对一半的意思就转化为,把每个选手说的两句话的结果加起来就是1 + 0 == 1
  • 如此一来,只能通过遍历所有情况,再用这个条件进行判断

2. 编写代码

  • 根据上述思路,选手名都是字符型,比赛名次是整型,那就用选手名和比赛名次建立循环
对应代码:
    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) == 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);
   }
  • 这时打印出来看看:

在这里插入图片描述

  • 我去。。!这么多种情况
  • 仔细观察会发现,原来有同名次的情况
  • 假如不想要同名次,咱们再加个限制条件来打印
if (A + B + C + D + E == 15 && A * B * C * D * E == 120)
    printf("A=%d,B=%d,C=%d,D=%d,E=%d", A, B, C, D, E);
  • 再看一下结果:

在这里插入图片描述嘿嘿~完美解决!

附上整个代码
#include<stdio.h>
int main()
{
    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) == 1) &&
                            ((B == 2) + (E == 4) == 1) &&
                            ((C == 1) + (D == 2) == 1) &&
                            ((C == 5) + (D == 3) == 1) &&
                            ((E == 4) + (A == 1) == 1))
                        {
                            if (A + B + C + D + E == 15 && A * B * C * D * E == 120)
                                printf("A=%d,B=%d,C=%d,D=%d,E=%d", A, B, C, D, E);
                        }
                    }
                }
            }
        }
    }

    return 0;
}

在这里插入图片描述

相关文章
|
6月前
|
C语言
c语言编程练习题:7-30 念数字
c语言编程练习题:7-30 念数字
145 0
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
87 0
|
C语言
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
186 0
|
6月前
|
C语言
C语言部分期末答案(来自PTA)
C语言部分期末答案(来自PTA)
|
C语言 C++
C语言刷题系列——7.(洛谷)上学迟到
C语言刷题系列——7.(洛谷)上学迟到
285 0
|
C语言
C语言:猜名次
题目: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三;
|
C语言
【C语言每日一题】猜名次
【C语言每日一题】猜名次
106 0
|
C语言
C语言解决逻辑分析题(猜凶手)(猜名次)
C语言解决逻辑分析题(猜凶手)(猜名次)
|
C语言
C语言经典问题—猜名次、猜凶手和杨辉三角
C语言经典问题—猜名次、猜凶手和杨辉三角
69 0
|
算法 C语言 C++
【C语言每日一题】——猜名次
猜名次🙌 猜名次 题目描述:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
95 0