带你刷 · 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;
}

在这里插入图片描述

相关文章
|
7月前
|
C语言
c语言编程练习题:7-30 念数字
c语言编程练习题:7-30 念数字
150 0
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
88 0
|
C语言
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
187 0
|
C语言 C++
C语言刷题系列——7.(洛谷)上学迟到
C语言刷题系列——7.(洛谷)上学迟到
292 0
|
7月前
|
存储 算法 C语言
C语言练习记录(蓝桥杯练习)(小蓝数点)
C语言练习记录(蓝桥杯练习)(小蓝数点)
|
C语言
【C语言练习】求名次、找凶手
【C语言练习】求名次、找凶手
79 0
|
C语言
C语言:猜名次
题目: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三;
|
C语言
C语言:猜凶手
题目: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。
110 0
|
C语言
C语言解决逻辑分析题(猜凶手)(猜名次)
C语言解决逻辑分析题(猜凶手)(猜名次)
|
C语言
【C语言每日一题】猜名次
【C语言每日一题】猜名次
107 0