蓝桥杯每日真题 - 第17天

题目:(最大数字)

题目描述(13届 C&C++ B组D题)

993ce3d31e284e10a88d64acff769af5.png

题目分析: 

  • 操作规则

    • 1号操作:将数字加1(如果该数字为9,变为0)。

    • 2号操作:将数字减1(如果该数字为0,变为9)。

  • 目标

    • 通过操作,将数字尽可能变大。

  • 限制

    • 总操作次数受限于 A 次1号操作和 B 次2号操作。

  • 核心问题

    • 在有限操作次数内,如何分配操作次数,使结果数字最大化?

解题思路:

  1. 优先级策略

    • 优先将当前位变成9,因为9是所有个位数中最大的数;

    • 根据剩余操作次数,依次考虑其他位。

  2. 递归解决

    • 每次递归针对某一位:

      • 尝试使用1号操作尽量向9靠拢;

      • 尝试使用2号操作绕过0靠拢9;

      • 比较两种策略下的最终结果,选择字典序更大的路径。

  3. 终止条件

    • 遍历到数字的末尾;

    • 可用操作次数(A 或 B)为0。

  4. 动态更新数字

    • 通过字符串的直接修改,更新当前数字。

代码实现(C语言):

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>
#include<string.h>void foo(char N[], int n, int a, int b) {if (N[n] == '\0') {return;}int poDis, neDis;int na, nb;char Na[20], Nb[20];poDis = 9 - (N[n] - '0');neDis = 10 + (N[n] - '0') - 9;if (a >= poDis && b >= neDis) {N[n] = '9';strcpy(Na, &N[n + 1]);strcpy(Nb, &N[n + 1]);foo(Na, 0, a - poDis, b);foo(Nb, 0, a, b - neDis);if (strcmp(Na, Nb) >= 0) {strcpy(&N[n + 1], Na);}else {strcpy(&N[n + 1], Nb);}}else if (a >= poDis) {a -= poDis;N[n] = '9';foo(N, n + 1, a, b);}else if (b >= neDis) {b -= neDis;N[n] = '9';foo(N, n + 1, a, b);}else {na = N[n] - '0' + a;nb = (10 + N[n] - '0' - b) % 10;if (na > nb) {N[n] = na + '0';a = 0;foo(N, n + 1, a, b);}else if (na < nb) {N[n] = nb + '0';b = 0;foo(N, n + 1, a, b);}else {N[n] = na + '0';strcpy(Na, &N[n + 1]);strcpy(Nb, &N[n + 1]);foo(Na, 0, 0, b);foo(Nb, 0, a, 0);if (strcmp(Na, Nb) >= 0) {strcpy(&N[n + 1], Na);}else {strcpy(&N[n + 1], Nb);}}}
}int main() {char N[20];int a, b;// inscanf("%s%d%d", N, &a, &b);// mainfoo(N, 0, a, b);// outprintf("%s", N);return 0;
}

 

得到运行结果:

d9eb7eb118314c9bbfec6b8c72b561a0.png

代码分析: 

  • 递归函数设计

    • 参数包括当前处理的位数、剩余的1号和2号操作次数。

    • 每次递归后更新字符串,并返回最佳结果。

  • 字符串操作

    • 为了保持数字位数的变化状态,利用字符串操作更新数字。

  • 状态转移

    • 如果可以使用1号操作,则递归尝试将当前位增加到9;

    • 如果可以使用2号操作,则递归尝试将当前位绕过0变成9;

    • 两种结果之间选择更优解。

 

难度分析

⭐️⭐️⭐️⭐️

 

总结

本题通过递归枚举所有可能的操作路径,并选择字典序最大的结果数字。通过合理的操作分配和优先级选择,可以在操作次数受限的情况下达到优化效果。递归的设计逻辑清晰,代码实现具有较好的通用性和扩展性。

 

 

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

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

相关文章

Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析

1. 产品定位 Ease Monitor 有如下的产品定位&#xff1a; 关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。 关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据&#xff1a;基础层、平台中间件层和应用层。 快速故障定位。 对于现有的系统…

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分,这里用到的是代码库 GitHub 中part2。 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的内参矩阵…

一道算法期末应用题及解答

1&#xff0e;印刷电路板布线区划分成为n m 个方格&#xff0c;确定连接方格a 到方格b 的最短布线方案。 在布线时&#xff0c;只能沿直线或者直角布线&#xff0c;为避免交叉&#xff0c;已经布线的方格做了封锁标记&#xff0c;其他线路不允许穿过被封锁的方格&#xff0c;某…

揭开广告引擎的神秘面纱:如何在0.1秒内精准匹配用户需求?

目录 一、广告系统与广告引擎介绍 &#xff08;一&#xff09;广告系统与广告粗分 &#xff08;二&#xff09;广告引擎在广告系统中的重要性分析 二、广告引擎整体架构和工作过程 &#xff08;一&#xff09;一般概述 &#xff08;二&#xff09;核心功能架构图 三、标…

freertos任务调度学习

首先创建任务&#xff0c;创建好任务后&#xff0c;开启任务调度器&#xff0c;任务才能执行 1.开启任务调度器 2.启动第一个任务 3.任务切换

初始ArKTs 2

一.类 1.1 声明 类声明引入一个新类型&#xff0c;并定义其字段、方法和构造函数。 定义类后&#xff0c;可以使用关键字new创建实例 可以使用对象字面量创建实例 在以下示例中&#xff0c;定义了Person类&#xff0c;该类具有字段firstname和lastname、构造函数和方法full…

在云服务器搭建 Docker

操作场景 本文档介绍如何在腾讯云云服务器上搭建和使用 Docker。本文适用于熟悉 Linux 操作系统&#xff0c;刚开始使用腾讯云云服务器的开发者。如需了解更多关于 Docker 相关信息&#xff0c;请参见 Docker 官方。 说明&#xff1a; Windows Subsystem for Linux&#xff…

【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5

文章目录 CodeMoss 简介CodeMoss 的模型集成如何安装和配置 CodeMossIDER 插件安装步骤 CodeMoss 的实战使用AI 问答功能代码优化与解释优化这段代码解释这段代码 文件上传与对话联网查询与 GPT 助手联网查询GPT 助手 提升开发效率的最佳实践结语更多文献 CodeMoss 简介 CodeM…

编译报错:protoc did not exit cleanly. Review output for more information.

目录标题 解决“protoc did not exit cleanly”的报错问题检查.proto文件的语法 解决“protoc did not exit cleanly”的报错问题 今天做的项目需要用到grpc&#xff0c;然后需要编写proto然后编译后实现grpc的具体方法&#xff01; 结果编译的时候报了protoc did not exit cl…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

【竞技宝】LOL-传奇杯:姿态飞机TP绕后一锤定音

北京时间2024年11月19日,英雄联盟第二届传奇杯正在如火如荼的进行之中。昨天迎来小组赛第四个比赛日,本日一共进行了七场小组赛的对决,那么在昨日上半场的四场比赛中,登场的各支队伍都取得了什么样的表现呢?接下来小宝为大家带来小组赛day4上半场的比赛战报。 OP(宁王队) 0-1 …

网络安全之信息收集-实战-1

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 实战&#xff1a;补天公益src“吉林通用航空职业技术学院” 奇安信&#xff5c;用户登录https://www.butian.net/Loo/submit?cid64918 域名或ip&#xff1a;https://www.jlth…

【后端】版本控制

版本控制 1. 什么是版本控制&#xff1f; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理…

【YOLOv11改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv11中引入DA、FCA、SA、SC、SE魔改v11,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segm

【数据结构】链表解析与实战运用(1.8w字超详细解析)

目录 引言 链表概念及结构 链表的优缺点 链表的分类 1.单向或者双向 2.带头或者不带头 3.带循环或者非循环 单链表接口函数的实现 接口函数一览 创建空节点&打印链表 尾部插入 头部插入 尾部删除 头部删除 查找 在pos位置之后插入节点 在pos位置之前插入节…

(微信小程序)基于Spring Boot的校园失物招领平台的设计与实现(vue3+uniapp+mysql)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【Linux课程学习】:Linux的调试器-gdb的使用(常见指令,cgdb)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 安装cgdb&#xff1a; 基本环境 1检查gdb是否…

【WRF-Urban】URBPARM.TBL参数解释及内容

【WRF-Urban】URBPARM.TBL参数解释及内容 URBPARM.TBL参数解释URBPARM.TBL参考 参考WRF-Urban教程-Urban Canopy Model URBPARM.TBL参数解释 各个城市相应的城市参数差异很大&#xff08;例如&#xff0c;有些城市的道路可能很宽但建筑物很矮&#xff0c;而其他城市的道路可…

DBeaver 连接 OceanBase Oracle 租户

DBeaver 是一款通用的数据库工具软件&#xff0c;支持任何具有JDBC驱动程序的数据库。DBeaver 需要 Java 运行环境的支持。截稿时 DBeaver 24.0.0 版本默认提供的 OceanBase 驱动是连接 MySQL 的&#xff0c;想连接 Oracle 租户需要新建一个驱动器使用。 下载数据库驱动包 1、…

使用 Prompt API 与您的对象聊天

tl;dr&#xff1a;GET、PUT、PROMPT。现在&#xff0c;可以使用新的 PromptObject API 仅使用自然语言对存储在 MinIO 上的对象进行总结、交谈和提问。在本文中&#xff0c;我们将探讨这个新 API 的一些用例以及代码示例。 赋予动机&#xff1a; 对象存储和 S3 API 的无处不在…