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

在这里插入图片描述

相关文章
|
人工智能 小程序 搜索推荐
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
今天给大家分享一个最近使用我们的“AI运动识别小程序插件”+“微搭”搭建小程序的经典案例。
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
|
人工智能 自然语言处理 运维
钉钉x昇腾:用AI一体机撬动企业数字资产智能化
大模型在过去两年迅速崛起,正加速应用于各行各业。尤其在办公领域,其主要模态——文字和图片,成为了数字化办公的基础内容,催生了公文写作、表格生成、文本翻译等多种应用场景,显著提升了工作效率。然而,AI引入办公场景也带来了数据安全与成本等问题。为此,钉钉与昇腾联合推出的“钉钉专属AI一体机解决方案”,通过本地化部署解决了数据安全、成本高昂及落地难等痛点,实现了从硬件到软件的深度协同优化,为企业提供了开箱即用的AI服务,推动了办公场景的智能化升级。
518 11
|
XML Java 数据格式
【Spring】全面讲解IOC、AOP、注入方式、bean的生命周期、aop通知应用 spring与web容器整合
Spring是一个开源的轻量级Java应用开发框架,它提供了一种简单、高效、灵活的方式来构建企业级应用程序。Spring框架的核心特点是依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),它通过一组模块化的组件提供全面的支持,使开发人员能够快速搭建可扩展、可维护的应用。
静态方法和实例方法的区别是什么?
静态方法和实例方法的区别是什么?
1236 5
|
存储 前端开发 JavaScript
React Hooks的魔法:如何在组件世界里施展响应式与复用的魔法
【8月更文挑战第27天】React Hooks 是自 React 16.8 起新增的功能,支持开发者在无需类组件的情况下利用 React 的状态管理和特性。本文通过实例展示了多种核心 Hooks 的使用方法:`useState` 用于实现响应式状态管理;`useEffect` 处理副作用操作,如数据获取等;`useMemo` 和 `useCallback` 有助于性能优化;`useRef` 则提供对 DOM 的直接引用。
156 2
|
数据采集 机器学习/深度学习 算法
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析继承机制(三)
【C++】面向对象编程的三大特性:深入解析继承机制
203 0
|
人工智能 前端开发 JavaScript
人工智能文生图技术介绍
文生图技术将文字描述转化为图像,免除了设计师的参与。它分为&quot;代码式&quot;和&quot;AI&quot;两类。代码式如PlantUML、Mermaid和Reveal.js,适合开发人员通过特定语法创建图表。AI文生图如MidJourney和文心一言,能根据文本生成图像,MidJourney在文生图领域表现突出。这些工具为不同工作场景提供了便利。
人工智能文生图技术介绍
|
存储 NoSQL 算法
MongoDB设置主键自增
【5月更文挑战第10天】
419 0
|
Java Unix API
LocalDate、 LocalTime、 LocalDateTime以及ZonedDate、 ZonedTime、 ZonedDateTime相关操作
LocalDate、 LocalTime、 LocalDateTime以及ZonedDate、 ZonedTime、 ZonedDateTime相关操作
342 0