蓝桥杯每日真题 - 第17天

题目:(最大数字)

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

题目分析: 

  • 操作规则

    • 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;
}

得到运行结果:

代码分析: 

  • 递归函数设计

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

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

  • 字符串操作

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

  • 状态转移

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

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

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

难度分析

⭐️⭐️⭐️⭐️

总结

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

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

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

相关文章

Leetcode打卡:最少翻转次数使二进制矩阵回文I

执行结果&#xff1a;通过 题目&#xff1a;3239 最少翻转次数使二进制矩阵回文I 给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#…

@JsonSerialize修复前端精度问题

后端id定位为Long类型&#xff0c;前端查询出来的值莫名多了几个000 造成这个问题的原因是精度丢失&#xff0c; java中long数据能表示的范围比js中number大&#xff0c;在跟前端交互时&#xff0c;这样也就意味着部分数值在js中存不下(变成不准确的值)。 在字段上加 JsonSeri…

大模型(LLMs)RAG 版面分析——表格识别方法篇

大模型&#xff08;LLMs&#xff09;RAG 版面分析——表格识别方法篇 一、为什么需要识别表格&#xff1f; 表格的尺寸、类型和样式展现出多样化的特征&#xff0c;如背景填充的差异性、行列合并方法的多样性以及内容文本类型的不一致性等。同时&#xff0c;现有的文档资料不…

基于Matlab PCA人脸识别(二)

1.2 向量与基变换 1.2.1 内积与投影 两个大小相同向量的内积被定义如下&#xff1a;

RE正则表达式 小练习

题目&#xff1a; 答案&#xff1a;

整理:4篇专注于多模态大语言模型(MLLM)的瘦身变体论文

近年来&#xff0c;随着人工智能技术飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;和多模态大语言模型&#xff08;MLLM&#xff09;成为了炙手可热的明星。它们不仅能处理文字&#xff0c;还能看图识字&#xff0c;简直是“全能选手”。这种能力得益于模型中加入…

车轮上的科技:Spring Boot汽车新闻集散地

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理汽车资讯网站的相关信息成为必然。开发合适…

go-zero(五) 模板定制

go-zero 模板定制 goctl 代码生成是基于 go 的模板去实现数据驱动的&#xff0c;实际开发中&#xff0c;使用goctl 生成的代码&#xff0c;并不符合我们的需求。 例如&#xff0c;我们刚刚的使用错误管理&#xff0c;我们需要在handler中返回的错误信息。 一、生成模板 首先…

ICML24最新开源时序基础模型MOMENT

论文标题&#xff1a;MOMENT: A Family of Open Time-series Foundation Models 论文链接&#xff1a;https://arxiv.org/pdf/2402.03885 前言 当前时间序列数据上预训练大型模型面临以下挑战&#xff1a;(1) 缺乏大型且统一的公共时间序列数据集&#xff0c;(2) 时间序列特…

Flink和Spark的区别是什么?各自的应用场景是什么?

一、Flink是什么&#xff1f; Flink&#xff1a;Flink 是一个分布式流处理框架&#xff0c;其架构基于流计算&#xff0c;将一切都看作是流。它采用了一种基于事件驱动的架构&#xff0c;数据以流的形式源源不断地进入系统&#xff0c;并且能够实时处理这些数据。例如&#xf…

2024.11.18晚Linux复习课笔记

第一章 cat -n显示行号 -b不显示空行号 pwd 打印当前的工作目录 cd ls 打印当前工作的所有文件 -a -A -l:显示当前文件的详细信息 -r:递归显示 passwd:修改密码 ip a 查看ip地址 poweroff shutdown -h 关机 reboot shutdown -r 第二章 man --help …

基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】

&#x1f388;系统亮点&#xff1a;协同过滤算法、二维码识别&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框…

Scaling Law的“终结“还是新起点?——开源实践者的深度思考

作者&#xff1a;宋大宝&#xff0c;与大宝同学因那篇《回顾总结展望「融合RL与LLM思想&#xff0c;探寻世界模型以迈向AGI」》结识于今年春天&#xff0c;虽我们当时某些思想观念有些出入&#xff0c;也碰撞出了很多火花与共鸣&#xff0c;并持续地相互启发的走到了现在。他是…

【qt】控件4

1.Qradiobutton(单选按钮) ui界面有三个按钮&#xff0c;应该文本框&#xff0c;根据不同的按钮来改变不同文本框的内容 根据不同的单选按钮改变不同的文本框。 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->radioB…

Day02_AJAX综合案例 (黑马笔记)

Day02_AJAX综合案例 目录 Day02_AJAX综合案例 学习目标 01.案例_图书管理-介绍 目标 讲解 小结 02.Bootstrap 弹框_属性控制 目标 讲解 小结 03.Bootstrap 弹框_JS控制 目标 讲解 小结 04.案例_图书管理_渲染列表 目标 讲解 小结 05.案例_图书管理_新增图书…

六、代码生成,《编译原理》(本科教学版),第2版

文章目录 零、前言0.1 编译器前端到后端 一、代码生成1.1 代码生成的任务1.2 给数据分配计算资源1.3 给代码选择合适的机器指令1.4 栈式计算机1.4.1 栈式计算机Stack的结构1.4.2 栈计算机的指令集1.4.3 变量的内存分配伪指令1.4.4 栈式计算机的代码生成1.4.4.1 递归下降代码生成…

Android集成FCM(Firebace Cloud Messaging )

集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面&#xff0c;创建自己的项目 2、点击自己创建好的项目&#xff0c;在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…

D2076——一款双通道音频功率放大器【青牛科技】

概述&#xff1a; D2076是一款双通道音频功率放大器&#xff0c;最低工作电压可到1.0V。适用于 便携式小型收音机或立体声耳机作双通道或BTL应用。 主要特点&#xff1a; BTL工作&#xff0c;Po90mW&#xff08;典型值&#xff09; 外接元器件少 通过外接PNP三极管作为…

智慧社区平台系统提升物业管理效率与居民生活质量

内容概要 智慧社区平台系统是为应对现代城市管理挑战而诞生的重要工具。随着城市化进程的加快&#xff0c;传统的物业管理方式已经难以满足日益增长的居民需求和管理复杂性。因此&#xff0c;引入智能化管理手段显得尤为重要。这个系统不仅仅是一个简单的软件&#xff0c;它是…

【langchain4j】AIservices能够实现更加灵活的chain

文章目录 AI service介绍如何工作的AiServices提供的能力支持的返回形式 简单的例子&#xff1a;接收用户消息&#xff0c;并按规定返回接收单个变量接收更多动态变量 advanced RAGChaining multiple AI Services&#xff1a;多个AiSerives合并到一起相关教程&#xff1a;[Lang…