2024年第十五届蓝桥杯C/C++B组复盘(持续更新)

news2024/12/23 20:12:17

在这里插入图片描述
🔥博客主页 小羊失眠啦.
🎥系列专栏《C语言》 《数据结构》 《C++》 《Linux》 《Cpolar》
❤️感谢大家点赞👍收藏⭐评论✍️


在这里插入图片描述

文章目录

  • 试题A:握手问题
    • 问题描述
    • 思路
  • 试题B:小球反弹
    • 问题描述
    • 思路
  • 试题C:好数
    • 问题描述
    • 思路
  • 试题D:R格式
    • 问题描述
    • 思路
  • 试题E:宝石组合
    • 问题描述
    • 思路

试题A:握手问题

问题描述

小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上, 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进 行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但 这 7 人与除这 7 人以外的所有人进行了握手)。请问这些人之间一共进行了多 少次握手?

注意 A 和 B 握手的同时也意味着 B 和 A 握手了,所以算作是一次握手。

思路

总共有50人参加了会议,其中7个人之间没有握手,但他们与其他43个人都握过手,握手次数为7*43=301次。

另外43个人之间握手的次数可以通过组合公式计算:C(43,2)=903次。

所以,这些人之间一共进行了 301+903=1204次握手。

因此,答案是:1204次。

#include <iostream>
#include <cmath>
 
using namespace std;

int countHandshakes(int total, int group) 
{
    int groupHandshakes = group * (total - group);
    int otherHandshakes = (total - group) * (total - group - 1) / 2;
    return groupHandshakes + otherHandshakes;
}

int main() 
{
    int total = 50;
    int group = 7;

    int numHandshakes = countHandshakes(total, group);

    cout << "这些人之间一共进行了 " << numHandshakes << " 次握手" << endl;

    return 0;
}

试题B:小球反弹

问题描述

有一长方形,长为 343720 单位长度,宽为 233333 单位长度。在其内部左 上角顶点有一小球(无视其体积),其初速度如图所示且保持运动速率不变,分 解到长宽两个方向上的速率之比为 dx : dy = 15 : 17。小球碰到长方形的边框时 会发生反弹,每次反弹的入射角与反射角相等,因此小球会改变方向且保持速 率不变(如果小球刚好射向角落,则按入射方向原路返回)。从小球出发到其第 一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度?答案四舍 五入保留两位小数。

在这里插入图片描述

思路

为了计算小球运动的路程,我们需要模拟小球在长方形内的反弹过程,直到它再次回到左上角顶点。由于小球在长宽方向上的速率之比是恒定的(dx : dy = 15 : 17),我们可以将问题分解为两个独立的一维问题,分别处理小球在长和宽方向上的运动。

首先,我们需要确定小球在碰到哪一边之前会先碰到另一边。这可以通过比较小球在两个方向上到达边界所需的时间来实现。一旦小球碰到边界,它就会以相同的角度反弹。我们可以记录每次反弹的位置和方向,直到小球再次回到起始点。

#include <iostream>  
#include <cmath>  
#include <iomanip>  
using namespace std;
struct Point 
{ 
    Point(double x = 0, double y = 0)
        : x(x)
        , y(y) 
    {}

    double x, y;
};

struct Velocity 
{
    Velocity(double dx = 0, double dy = 0) 
        : dx(dx)
        , dy(dy) 
    {}

    double dx, dy;
};

double calculateDistance(double length, double width, const Velocity& v) 
{
    double totalDistance = 0;
    Point position(0, 0); // 初始位置为左上角顶点  
    Velocity currentVelocity = v;

    while (true) 
    {
        // 计算小球在长和宽方向上分别需要多长时间到达边界  
        double timeToHitX = (length - position.x) / currentVelocity.dx;
        double timeToHitY = (width - position.y) / currentVelocity.dy;

        // 根据时间决定小球先碰到哪一边  
        if (timeToHitX < timeToHitY) 
        {
            // 碰到长方形的右边  
            totalDistance += position.x + currentVelocity.dx * timeToHitX;
            currentVelocity.dx = -currentVelocity.dx; // 反弹  
            position.x = length - currentVelocity.dx * timeToHitX;
        }
        else 
        {
            // 碰到长方形的下边  
            totalDistance += position.y + currentVelocity.dy * timeToHitY;
            currentVelocity.dy = -currentVelocity.dy; // 反弹  
            position.y = width - currentVelocity.dy * timeToHitY;
        }

        // 检查是否回到起始点  
        if (position.x == 0 && position.y == 0) 
        {
            break; // 如果回到起始点,退出循环  
        }
    }

    return totalDistance;
}

int main() 
{
    double length = 343720; // 长方形长  
    double width = 233333;  // 长方形宽  
    Velocity v(15, 17);    // 小球的速率比  

    // 计算小球运动的总路程  
    double totalDistance = calculateDistance(length, width, v);

    // 输出结果,保留两位小数  
    cout << fixed << setprecision(2) << totalDistance << endl;

    return 0;
}

试题C:好数

问题描述

一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 · · · )上 的数字是奇数,偶数位(十位、千位、十万位 · · · )上的数字是偶数,我们就称 之为“好数”。

给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。

输入格式

一个整数 N。

输出格式

一个整数代表答案。

样例输入

24

2024

样例输出

7

150

样例说明

对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。

评测用例规模与约定

对于 10% 的评测用例,1 ≤ N ≤ 100。

对于 100% 的评测用例,1 ≤ N ≤ 107。

思路

遍历从1到N的所有整数,判断每个整数是否满足好数的条件,如果满足则计数器加1。

条件:定位一个flag在奇数位上为1,在偶数位上为-1,判断奇数位上是否为奇数且flag是否为1或者偶数位上是否为偶数且flag是否为-1

#include <iostream>

using namespace std;

bool isGoodNumber(int num) 
{
    int flag = 1;
    while (num ) 
    {
        int current = num % 10;
        if (!((flag == 1 && current % 2) || (flag == -1 && current % 2 == 0))) 
            return false;
        num /= 10;
        flag *= -1;
    }
    return true;
}

int countGoodNumbers(int N) 
{
    int count = 0;
    for (int i = 1; i <= N; i++) 
    {
        if (isGoodNumber(i)) 
            count++;
    }
    return count;
}

int main() 
{
    int N = 0;
    cin >> N;
    cout << countGoodNumbers(N) << endl;
    return 0;
}

试题D:R格式

问题描述

小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 0 的浮点 数 d,可以用 R 格式的整数来表示。给定一个转换参数 n,将浮点数转换为 R 格式整数的做法是:

  1. 将浮点数乘以 2的n次方 ;
  2. 四舍五入到最接近的整数。

输入格式

一行输入一个整数 n 和一个浮点数 d,分别表示转换参数,和待转换的浮 点数。

输出格式

输出一行表示答案:d 用 R 格式表示出来的值。

样例输入

2 3.14

样例输出

13

样例说明

在这里插入图片描述

评测用例规模与约定

对于 50% 的评测用例:1 ≤ n ≤ 10,1 ≤ 将 d 视为字符串时的长度 ≤ 15。

对于 100% 的评测用例:1 ≤ n ≤ 1000,1 ≤ 将 d 视为字符串时的长度 ≤ 1024;

保证 d 是小数,即包含小数点。

思路

  1. 首先,我们需要定义一个函数convertToRFormat,该函数接受一个浮点数d和一个整数n作为参数。
  2. 在函数中,我们首先计算转换因子factor,即2的n次方。
  3. 然后,我们将浮点数d乘以转换因子factor,得到一个新的浮点数。
  4. 最后,我们使用四舍五入函数round将新的浮点数四舍五入到最接近的整数,并将结果返回。
#include <iostream>
#include <cmath>

using namespace std;

long long convertToRFormat(double d, int n) 
{
    double factor = pow(2, n);
    long long result = round(d * factor);
    return result;
}

int main() 
{
    double d = 0.0;
    int n = 0;
    cin >> n >> d;

    long long rFormat = convertToRFormat(d, n);

    cout << rFormat << endl;

    return 0;
}

试题E:宝石组合

问题描述

在一个神秘的森林里,住着一个小精灵名叫小蓝。有一天,他偶然发现了 一个隐藏在树洞里的宝藏,里面装满了闪烁着美丽光芒的宝石。这些宝石都有 着不同的颜色和形状,但最引人注目的是它们各自独特的 “闪亮度” 属性。每颗 宝石都有一个与生俱来的特殊能力,可以发出不同强度的闪光。小蓝共找到了 N 枚宝石,第 i 枚宝石的 “闪亮度” 属性值为 Hi,小蓝将会从这 N 枚宝石中选 出三枚进行组合,组合之后的精美程度 S 可以用以下公式来衡量:

在这里插入图片描述

其中 LCM 表示的是最小公倍数函数。

小蓝想要使得三枚宝石组合后的精美程度 S 尽可能的高,请你帮他找出精 美程度最高的方案。如果存在多个方案 S 值相同,优先选择按照 H 值升序排列 后字典序最小的方案。

输入格式

第一行包含一个整数 N 表示宝石个数。

第二行包含 N 个整数表示 N 个宝石的 “闪亮度”。

输出格式

输出一行包含三个整数表示满足条件的三枚宝石的 “闪亮度”。

样例输入

5

1 2 3 4 9

样例输出

1 2 3

评测用例规模与约定

对于 30% 的评测用例:3 ≤ N ≤ 100,1 ≤ Hi ≤ 1000。

对于 60% 的评测用例:3 ≤ N ≤ 2000。

对于 100% 的评测用例:3 ≤ N ≤ 105,1 ≤ Hi ≤ 105。

思路

我们需要找到三枚宝石的组合,使得他们的最小公倍数与各自“闪亮度”属性值的乘积之和最大。此外,如果有多个最大精美程度的方案,我们还需要根据H值的升序排列选择字典序最小的方案。

首先,我们需要实现计算两个数的最小公倍数(LCM)的函数,通常LCM可以通过两数乘积除以它们的最大公约数(GCD)来得到。然后,我们需要遍历所有可能的宝石组合,计算每个组合的精美程度,并跟踪最大的S值以及对应的宝石组合。

#include <iostream>  
#include <vector>  
#include <algorithm>  
using namespace std;

// 计算最大公约数  
float gcd(int a, int b) 
{
    if (b == 0) 
        return a;
    return gcd(b, a % b);
}

// 计算最小公倍数  
float lcm(int a, int b) 
{
    return a * b / gcd(a, b);
}

// 定义一个宝石的结构体  
struct Gem 
{
    int H; // 闪亮度  
    int index; // 宝石的索引,用于记录宝石的原始顺序  
};

// 自定义比较函数,用于按H值升序排序  
bool compareGems(const Gem& a, const Gem& b) 
{
    if (a.H == b.H)
        return a.index < b.index; // 如果H值相同,按索引升序排列  
    return a.H < b.H;
}

// 查找最大精美程度的宝石组合  
vector<int> findMaxBeautyCombination(const vector<int>& gems) 
{
    int N = gems.size();
    vector<Gem> gemVec(N);
    for (int i = 0; i < N; ++i) 
    {
        gemVec[i].H = gems[i];
        gemVec[i].index = i;
    }

    // 按H值升序排序  
    sort(gemVec.begin(), gemVec.end(), compareGems);

    float maxBeauty = 0;
    vector<int> bestCombination;

    // 遍历所有可能的宝石组合  
    for (int i = 0; i < N - 2; ++i) 
    {
        for (int j = i + 1; j < N - 1; ++j) 
        {
            for (int k = j + 1; k < N; ++k) 
            {
                float beauty = (gemVec[i].H * 100 + gemVec[j].H * 10 + gemVec[k].H) * (lcm(lcm(gemVec[i].H, gemVec[j].H), gemVec[k].H) /
                    (lcm(gemVec[i].H, gemVec[j].H) * lcm(gemVec[j].H, gemVec[k].H) * lcm(gemVec[i].H, gemVec[k].H)));

                if (beauty > maxBeauty) 
                {
                    maxBeauty = beauty;
                    bestCombination = { gemVec[i].H, gemVec[j].H, gemVec[k].H };
                }
            }
        }
    }

    return bestCombination;
}

int main() 
{
    int N;
    cin >> N; // 输入宝石数量  
    vector<int> gems(N);
    for (int i = 0; i < N; ++i)
        cin >> gems[i]; // 输入每颗宝石的闪亮度  

    // 查找最大精美程度的宝石组合  
    vector<int> result = findMaxBeautyCombination(gems);

    // 输出结果  
    for (int H : result)
        cout << H << " ";
    cout << endl;

    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1595718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

函数与结构体

P2415 集合求和 题目描述 给定一个集合 s&#xff08;集合元素数量≤30&#xff09;&#xff0c;求出此集合所有子集元素之和。 输入格式 集合中的元素&#xff08;元素≤1000&#xff09; 输出格式 s 所有子集元素之和。 输入输出样例 输入 2 3 输出 10 说明/提示【样…

Flutter - flutter_gen 资源管理

引言&#xff1a; 在开发 Flutter 应用时&#xff0c;我们经常需要使用各种静态资源&#xff0c;如图片、字体和音频等。如何有效地管理和加载这些资源呢&#xff1f;本篇博客将以图片为例带你解密 Flutter 项目中是如何管理资源地。 assets 加载资源 具体文件名引入 在工程…

软件杯 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

L1-041 寻找250

对方不想和你说话&#xff0c;并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式&#xff1a; 输入在一行中给出不知道多少个绝对值不超过1000的整数&#xff0c;其中保证至少存在一个“250”。 输出格式&#xff1a; 在一行中输出第一次…

postman接口测试(入门到精通)

下载&#xff1a; postman官方地址 测试外部接口&#xff1a;测试被测系统和外部系统之间的接口。&#xff08;只需要测试正例即可&#xff09; 测试内部接口&#xff1a; 1.内部接口只提供给内部系统使用。&#xff08;只需要测试正例即可&#xff09; 2.内部接口提供给外…

Gradle 实战 - 插件-ApiHug准备-工具篇-015

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

Unity 人形骨骼动画模型嘴巴张开

最近搞Daz3D玩&#xff0c;导入后挂上动画模型嘴巴张开&#xff0c;其丑无比。 Google了一下&#xff0c;得知原因是Unity没有对下巴那根骨骼做控制&#xff0c;动画系统就会把它放到默认的位置&#xff0c;嘴巴就张开了。找到了3种解决办法。 1.移除动画中对下巴这个骨骼的转…

【深度学习】YOLO-World: Real-Time Open-Vocabulary Object Detection,目标检测

介绍一个酷炫的目标检测方式&#xff1a; 论文&#xff1a;https://arxiv.org/abs/2401.17270 代码&#xff1a;https://github.com/AILab-CVC/YOLO-World 文章目录 摘要Introduction第2章 相关工作2.1 传统目标检测2.2 开放词汇目标检测 第3章 方法3.1 预训练公式&#xff1a…

C语言中的数据结构--链表的应用2(3)

前言 上一节我们学习了链表的应用&#xff0c;那么这一节我们继续加深一下对链表的理解&#xff0c;我们继续通过Leetcode的经典题目来了解一下链表在实际应用中的功能&#xff0c;废话不多说&#xff0c;我们正式进入今天的学习 单链表相关经典算法OJ题4&#xff1a;合并两个…

【前端工程化指南】什么是版本控制系统?

什么是版本控制系统 想必大家在多人开发时一定会遇到这样的问题&#xff1a; 每次集中合并大家的代码都要通过U盘、网盘等各类传输工具集中代码&#xff0c;非常麻烦。在多人同时修改同一文件或相同部分代码时&#xff0c;可能会产生冲突&#xff0c;开发人员需要手动比较代码…

自编译支持CUDA硬解的OPENCV和FFMPEG

1 整体思路 查阅opencv的官方文档&#xff0c;可看到有个cudacodec扩展&#xff0c;用他可方便的进行编解码。唯一麻烦的是需要自行编译opencv。 同时&#xff0c;为了考虑后续方便&#xff0c;顺手编译了FFMPEG&#xff0c;并将其与OPENCV绑定。 在之前的博文“鲲鹏主机昇腾A…

《系统分析与设计》实验-----需求规格说明书 哈尔滨理工大学

文章目录 需求规格说明书1&#xff0e;引言1.1编写目的1.2项目背景1.3定义1.4参考资料 2&#xff0e;任务概述2.1目标2.2运行环境2.3条件与限制 3&#xff0e;数据描述3.1静态数据3.2动态数据3.3数据库介绍3.4数据词典3.5数据采集 4&#xff0e;功能需求4.1功能划分4.2功能描述…

arxiv文章导出的bibtex格式是misc导致latex引用不正确

问题 在arxiv官网上右下角导出bibtex&#xff0c;发现是misc格式&#xff0c;然后我用的是springer的期刊latex模板&#xff0c;发现引用不正确。 引用效果如下&#xff0c;就只有一个2024。 解决方案&#xff1a; 把上面那个bibtex手动改成下面这个。 article{liu2024in…

SpringCloud实用篇(四)——Nacos

Nacos nacos官方网站&#xff1a;https://nacos.io/ nacos是阿里巴巴的产品&#xff0c;现在是springcloud的一个组件&#xff0c;相比于eureka的功能更加丰富&#xff0c;在国内备受欢迎 nacos的安装 下载地址&#xff1a;https://github.com/alibaba/nacos/releases/ 启动…

【寒假集训营总结笔记——7道优质好题】

牛客寒假集训营总结笔记——7道优质好题 一、Trie树的应用&#xff1a; 题目链接&#xff1a;Tokitsukaze and Min-Max XOR 1、题意 2、题解 1、首先这道题的答案和元素本身的顺序是无关的&#xff0c;因为假如你选择了一些数字&#xff0c;它是默认必须排好序才能记作是答案…

docker特殊问题处理3——docker-compose安装配置nacos

最近几年随着大数据和人工智能持续大热&#xff0c;容器化安装部署运维已经走进了各个中小公司&#xff0c;也得已让众多开发者能上手实际操作&#xff0c;不过说真心话&#xff0c;“万物皆可容器化”的理念越来越深入人心。 而如何使用docker-compose安装&#xff0c;配置&a…

mxnet安装

ChatGPT 安装 MXNet 是一个非常直接的过程&#xff0c;可以通过几种方法实现&#xff0c;包括使用Python的包管理工具pip安装预编译的二进制包&#xff0c;或者从源代码编译。以下是使用pip安装MXNet的基本步骤&#xff1a;1. 首先&#xff0c;确保已经安装了Python和pip。通常…

ELK(Elasticsearch+Logstash+Kibana)日志分析系统

目录 前言 一、ELK日志分析系统概述 1、三大组件工具介绍 1.1 Elasticsearch 1.1.1 Elasticsearch概念 1.1.2 关系型数据库和ElasticSearch中的对应关系 1.1.3 Elasticsearch提供的操作命令 1.2 Logstash 1.2.1 Logstash概念 1.2.2 Logstash的主要组件 1.2.3 Logsta…

Weblogic任意文件上传漏洞(CVE-2018-2894)漏洞复现(基于vulhub)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

【面试八股总结】排序算法(一)

参考资料 &#xff1a;阿秀 一、冒泡排序 冒泡排序就是把小的元素往前交换或者把大的元素往后交换&#xff0c;比较相邻的两个元素&#xff0c;交换也发生在这两个元素之间。具体步骤&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对…