蓝桥杯之递归二
1.数的划分
题目描述
将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3n=7,k=3,下面三种分法被认为是相同的。
1,1,5;1,5,1;5,1,1;1,1,5;1,5,1;5,1,1;
问有多少种不同的分法。
输入描述
输入一行,22 个整数 n,k (6≤n≤200,2≤k≤6)n,k (6≤n≤200,2≤k≤6)。
输出描述
输出一个整数,即不同的分法。
输入输出样例
示例 1
输入
7 3
输出
4
递归解题思路
看到“整数分拆”问题,直接想到“递归”
递归的核心思想:将大问题分解为小问题,通过解决小问题来构建大问题的解。
递归的终止条件:
-
当
n
或m
为 0,或者n
小于m
时,分拆方式数量为 0。 -
当
m
为 1 或n
等于m
时,分拆方式数量为 1。
递归的分解逻辑:
-
不选1的情况:将每个数字减去1,问题转化为
f(n - m, m)
。 -
选1的情况:其中一个数字是1,问题转化为
f(n - 1, m - 1)
。
最终结果是两种情况的和:f(n - m, m) + f(n - 1, m - 1)
。
解题步骤模板:
public static int f(int n, int m) {// 边界条件if (n == 0 || m == 0 || n < m) {return 0;}if (m == 1 || n == m) {return 1;}// 递归逻辑else {return f(n - m, m) + f(n - 1, m - 1);}
}
示例代码模板:
import java.util.Scanner;public class Main {// 递归函数,用于计算将整数 n 分成 m 份的方式数public static int f(int n, int m) {// 边界条件:当 n 或 m 为 0,或者 n 小于 m 时,分拆方式数量为 0if (n == 0 || m == 0 || n < m) {return 0;}// 当 m 为 1 或 n 等于 m 时,分拆方式数量为 1if (m == 1 || n == m) {return 1;}// 递归逻辑:// 1. 不选1的情况:将每个数字减去1,问题转化为 f(n - m, m)// 2. 选1的情况:其中一个数字是1,问题转化为 f(n - 1, m - 1)// 总分拆方式数量为两者的和else {return f(n - m, m) + f(n - 1, m - 1);}}// 主函数,程序入口public static void main(String[] args) {// 创建 Scanner 对象,用于读取用户输入Scanner sc = new Scanner(System.in);// 读取用户输入的整数 nint n = sc.nextInt();// 读取用户输入的整数 kint k = sc.nextInt();// 调用递归函数 f(n, k),计算分拆方式数量// 输出结果System.out.println(f(n, k));}
}
思维导图:
训练方法:
-
理解递归思想:仔细阅读代码,确保理解递归的终止条件和递归逻辑。
-
手算小例子:选择一个小的例子(如
n = 4
,m = 2
),手动计算递归调用的过程,然后用代码验证结果。 -
调试和优化:观察递归调用的深度和次数,尝试用记忆化技术优化代码,避免重复计算。
-
扩展应用:将代码逻辑应用到其他类似问题,如“将整数分成任意多份”的问题
2.数的计算
题目描述
输入一个自然数 n (n≤1000)n (n≤1000),我们对此自然数按照如下方法进行处理:
-
不作任何处理;
-
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
-
加上数后,继续按此规则进行处理,直到不能再加自然数为止。
问总共可以产生多少个数。
输入描述
输入一个正整数 nn。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
6
输出
6
递归解题思路
看到“整数分拆”问题,直接想到“递归”
递归的核心思想:将大问题分解为小问题,通过解决小问题来构建大问题的解。
递归的终止条件:当 n == 1
时,分拆方式数量为 1。
递归的分解逻辑:通过遍历从1到n/2的数i,每次将当前数i分拆,并递归计算i的分拆方式。
解题步骤模板:
public static void f(int n) {// 递归终止条件if (n == 1) {return;}// 遍历 i 从 1 到 n/2,计算分拆方式for (int i = 1; i <= n / 2; i++) {// 每次分拆时,增加结果计数res++;// 递归计算更小的整数 i 的分拆方式f(i);}
}
示例代码模板:
import java.util.Scanner;public class Main {// 全局变量,用于存储最终结果static int res = 1;// 递归函数,用于计算整数 n 的分拆方式数量public static void f(int n) {// 递归终止条件:当 n == 1 时,分拆方式数量为 1if (n == 1) {return;}// 遍历 i 从 1 到 n/2,计算分拆方式for (int i = 1; i <= n / 2; i++) {// 每次分拆时,增加结果计数res++;// 递归计算更小的整数 i 的分拆方式f(i);}}// 主函数,程序入口public static void main(String[] args) {// 创建 Scanner 对象,用于读取用户输入Scanner sc = new Scanner(System.in);// 读取用户输入的整数 nint n = sc.nextInt();// 调用递归函数 f(n),计算分拆方式数量f(n);// 输出最终结果System.out.println(res);}
}
思维导图:
训练方法:
-
理解递归思想:仔细阅读代码,确保理解递归的终止条件和递归逻辑。
-
手算小例子:选择一个小的例子(如
n = 4
),手动计算递归调用的过程,然后用代码验证结果。 -
调试和优化:观察递归调用的深度和次数,尝试用记忆化技术优化代码,避免重复计算。
-
扩展应用:将代码逻辑应用到其他类似问题,如“将整数分成特定数量的份”或“将整数分成不相等的份”的问题。
自学蓝桥杯笔记,希望我们可以一起学习!
相关文章:
蓝桥杯之递归二
1.数的划分 题目描述 将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n7,k3n7,k3,下面三种分法被认为是相同的。 1,1,5;1,5,…...
【大疆dji】ESDK开发环境搭建(软件准备篇)
接上一篇【大疆dji】ESDK开发环境搭建(硬件准备篇) 1. 编译环境 ESDK 提供 x86_64/aarch64 基于 Linux 平台 Ubuntu 发行版操作系统构建的静态库,运行 demo 先正确安装所需的依赖包。arm32位就不支持了。建议使用编译安装的方式,…...
Android TTY设备调用流程和简单分析
Linux TTY系统中ioctl的调用流程详解:从应用层到MSM GENI Serial驱动 本文档详细分析Linux系统中从用户空间应用程序发起TTY ioctl请求到特定驱动(例如msm_geni_serial_ioctl)的完整调用流程,包括32位应用与64位内核之间的兼容性问题分析。 1. 总体调用路径概览 以下是完…...
数字孪生赋能管理系统,降本增效立竿见影
1. 数字孪生基础概念及其在管理系统中的应用前景 数字孪生是一种集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射,从而反映相对应的实体装备的全生命周期过程。其核心在于将现实世界中的物理对象或系统与其数字化模型相结合&…...
Java学习手册:Web 应用架构概述
一、Web 应用架构的演变 在互联网发展的初期阶段,Web 应用普遍采用客户端 / 服务器(C/S)架构模式。客户端应用程序与服务器端应用程序直接建立连接,进行数据交互和业务处理。然而,这种架构存在诸多局限性。由于客户端…...
企业网站安装 SSL安装的必要性
能够带来安全的加密和快速的访问体验,防止中间人的流量劫持,保障用户隐私信息的安全,帮助用户识别钓鱼网站,提升网站在搜索引擎的排名。 能够防止黑客盗走客户银行卡账号的机密信息,保证信息的机密性,防止…...
【CF】Day38——Codeforces Round 965 (Div. 2) B
B. Minimize Equal Sum Subarrays 题目: 思路: 直觉题 我们可以这样构造,将整个数列左移一位即可,为什么呢? 因为这样我们能尽可能地保证数列的数字尽可能多的同时 且 有一个数不同 这里介绍一个rorate函数…...
leetcode 300. Longest Increasing Subsequence
目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析明确并理解递推公式 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。 第一步,明确并理解…...
解密大模型背后的秘密:训练、优化与挑战
解密大模型背后的秘密:训练、优化与挑战 在当今的人工智能领域,大模型(Large Language Models, LLMs)已经成为了一个不可忽视的存在。从自然语言处理到图像生成,再到推荐系统,大模型以其强大的泛化能力和创…...
第33讲|遥感大模型在地学分类中的初探与实战
目录 🧠 一、什么是“遥感大模型”? 📚 二、遥感大模型在地学分类中的优势 📍三、案例:使用 Segment Anything Model (SAM) 进行遥感地物分割 📦 1. 安装与依赖配置(PyTorch) 🖼 2. 读取遥感图像(可用 Sentinel-2 伪彩色图) 🔧 3. SAM 模型载入 💡 …...
LeetCode 438 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "…...
【25软考网工笔记】第二章(6)脉冲编码调制PCM、通信和交换方式
目录 一、脉冲编码调制PCM 1. 脉冲编码调制的数字化过程 1)采样 2)量化 3)编码 2. PCM计算 3. 应用案例 1)例题1 2)例题1 3)例题3 知识小结 二、通信和交换方式 1.数据通信方式分类 1&#x…...
JSON学习笔记
文章目录 1. JSON是什么2. JSON的特点与结构3. JSON的使用4. JSON文件读取 1. JSON是什么 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和…...
高阶指南:动态定价下eBay利润率控制的4维财务模型
在eBay平台上,动态定价(Dynamic Pricing)早已不是新鲜概念。随着市场供需的瞬时波动、竞争产品的变化,以及跨境电商红海局势的加剧,卖家若想在残酷的价格战中保住利润、稳住运营基本盘,仅靠经验主义已经远远…...
【NLP 66、实践 ⑰ 基于Agent + Prompt Engineering文章阅读】
你用什么擦干我的眼泪 莎士比亚全集 工业纸巾 还是你同样泛红的眼睛 —— 4.19 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt:用户传入的提示词(如 “请分析这篇作文的主题”),指导模型执行任务 client&…...
Keil MDK中禁用半主机(No Semihosting)
在 ARM 编译器(如 Keil MDK) 中禁用半主机(Semihosting)并实现标准库的基本功能,需要以下步骤: 1. 禁用半主机 #pragma import(__use_no_semihosting) // 禁用半主机模式作用:防止标准库函数&…...
QML中的3D功能--纹理应用
Qt 3D 提供了强大的纹理支持,可以实现各种复杂的材质效果。以下是 Qt 3D 纹理开发的全面技术方案。 一、纹理处理的流程图 纹理处理关键步骤说明: 资源准备阶段 支持格式:PNG/JPG/KTX/DDS等 尺寸要求:建议2的幂次方(非强制) 纹理加载路径 qml Texture2D {source: "…...
LeetCode[459]重复的子字符串(KMP解法)
思路: 最近迷上了KMP算法,所以这道题也是来搞一下KMP算法,总所周知KMP是需要维护一个前缀表,KMP算法不是比较一个字符串包不包含另一个字符串的吗,这个重复字符串的题也能用?猫爷:毋庸置疑&…...
数据驱动未来:大数据在智能网联汽车中的深度应用
数据驱动未来:大数据在智能网联汽车中的深度应用 引言 随着智能网联汽车(Intelligent Connected Vehicles,ICV)的快速发展,数据已成为其核心驱动力。从实时交通数据到车辆传感器信息,大数据的深度应用正在让智能汽车更安全、更高效、更智能化。那么,大数据如何赋能智能…...
基于MCP的RAG系统实战:用Cursor+GroundX构建复杂文档问答引擎
在AI与文档处理的融合趋势下,基于MCP协议的RAG(Retrieval-Augmented Generation)系统为复杂文档的智能问答提供了全新解决方案。本文将详细解析如何通过Cursor编辑器(MCP客户端)与GroundX(MCP服务器)的组合,构建一个可处理科研文献、企业知识库的端到端问答系统,并提供…...
DSA数据结构与算法 4
第2章 排序技术 2.1 排序简介 排序是将数据按照特定顺序(升序或降序)排列的过程,它不仅是计算机科学中的基础操作,也是日常生活中不可或缺的工具。举个例子,想象一个图书馆里的书籍,如果这些书籍没有按照作…...
23种设计模式全解析及其在自动驾驶开发中的应用
一、创建型模式(5种) 目标:解耦对象创建过程,提升系统灵活性 模式名称核心思想典型场景自动驾驶应用示例工厂方法子类决定实例化对象类型日志系统、数据库连接器创建激光雷达/摄像头等传感器实例抽象工厂创建相关对象家族GUI组件…...
基于WiFi的智能教室数据监测系统的设计与实现
标题:基于WiFi的智能教室数据监测系统的设计与实现 内容:1.摘要 随着教育信息化的发展,对教室环境及设备数据监测的智能化需求日益增长。本文的目的是设计并实现一种基于WiFi的智能教室数据监测系统。方法上,采用WiFi模块实现数据的无线传输,…...
Linux操作系统--环境变量
目录 基本概念: 常见环境变量: 查看环境变量的方法: 测试PATH 测试HOME 和环境变量相关的命令 环境变量的组织方式:编辑 通过代码如何获取环境变量 通过系统调用获取或设置环境变量 环境变量通常具有全局属性 基本概念…...
备份jenkins
jenkins用熟了很爽,jenkins用熟了很香,jenkins用熟了可以起飞…… 但~你们是否有过这种经历? 庚子年四月初一 路人甲小手一抖,不小心把配置删了,然后只能重新配置,再然后发现鬼记得太古时代都做了哪些配置…...
纯FPGA实现AD9361控制的思路和实现 UART实现AXI_MASTER
这里用一个串口接收PC机传过来的读写寄存器的控制指令,对地址地址的AXI_sLAVE进行读写后返回其结果。 串口收发器用的代码还是经典的FPGA4FUN上的。fpga4fun.com - Serial interface (RS-232) 我做了极小修改,直接贴出来代码: // RS-232 RX…...
计算机网络期中复习笔记(自用)
复习大纲 –第一章 概述 计算机网络的组成 网络边缘:主机和网络应用程序(又称为“端系统”) 端系统中运行的程序之间的通信方式可划分为两大类: 客户/服务器方式(C/S方式) 对等方式(P2P方式…...
MFC文件-屏幕录像
下载本文件 本文件将获取屏幕图像数据的所有代码整合到两个文件中(ScreenRecorder.h和ScreenRecorder.cpp),使获取屏幕图像数据变得简单。输出IYUV视频流。还可以获取系统播放的声音,输出PCM音频流。由于使用了MFC类,本…...
JAVA的泛型
为什么引入泛型 有两个作用: 适用于多种数据类型执行相同的代码(代码复用)泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)消除强制类型转换兼容性与类型擦除更灵活…...
【UniApp】Vue2 scss 预编译器默认已由 node-sass 更换为 dart-sass
从 HBuilderX 4.56 ,vue2 项目也将默认使用 dart-sass 预编译器。 vue2开发者sass预处理注意: sass的预处理器,早年使用node-sass,也就是vue2最初默认的编译器。 sass官方推出了dart-sass来替代。node-sass已经停维很久了。 另…...
【sylar-webserver】8 HOOK模块
文章目录 知识点HOOK实现方式非侵入式hook侵入式hook ⭐⭐⭐ 覆盖系统调用接口获取被全局符号介入机制覆盖的系统调用接口 具体实现 在写之前模块的时候,我一直在困惑 协程是如何高效工作的,毕竟协程阻塞线程也就阻塞了。 HOOK模块解开了我的困惑。&…...
【今日三题】判断是不是平衡二叉树(递归) / 最大子矩阵(二维前缀和) / 小葱的01串(滑动窗口)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 判断是不是平衡二叉树(递归)最大子矩阵(二维前缀和)小葱的01串(滑动窗口) 判断是不是平衡二叉树(递归) 判断是不是平衡二叉…...
交易系统的构建与实战法则
Ⅰ 交易哲学:理解市场本质 时间的艺术:鳄鱼法则的启示80%的交易时间应用于观察和等待日均有效交易机会不超过3次(以A股为例)杰西利弗莫尔的棉花合约案例(1907年等待11周)波动率与交易频率的黄金分割比例Ⅱ 形态识别系统:双轨交易模型 A. 趋势引擎 三级趋势验证体系: 均…...
C++高并发内存池ConcurrenMemoPool
一、介绍高并发内存池 本项目的原型是Google的开源项目tcmalloc,即线程缓存的malloc,相较于系统的内存分配函数malloc,free,本项目能达到高效的多线程内存管理 旨在学习其核心框架,借鉴其实现方式来模拟实现出一个我们…...
ubuntu下gcc/g++安装及不同版本切换
1. 查看当前gcc版本 $ gcc --version# 查看当前系统中已安装版本 $ ls /usr/bin/gcc*2. 安装新版本gcc $ sudo apt-get update# 这里以版本12为依据(也可以通过源码方式安装,请自行Google!) $ sudo apt-get install -y gcc-12 g…...
React-在使用map循环数组渲染列表时须指定唯一且稳定值的key
在渲染列表的时候,我们须给组件或者元素分配一个唯一值的key, key是一个特殊的属性,不会最终加在元素上面,也无法通过props.key来获取,仅在react内部使用。react中的key本质是服务于diff算法, 它的默认值是null, 在diff算法过程中…...
(03)Vue的常用指令
文章目录 第3章 Vue的常用指令3.1 v-text与v-html3.2 v-for3.3 v-if与v-show3.4 MVVM双向绑定3.4.1 v-bind3.4.2 v-model 第3章 Vue的常用指令 3.1 v-text与v-html v-text:不会渲染字符串里面的HTML内容v-html:会渲染字符串里面的HTML内容 <body s…...
从代码学习深度学习 - 优化算法 PyTorch 版
文章目录 前言一、小批量梯度下降(Mini-batch Gradient Descent)1.1 公式1.2 PyTorch 实现二、动量法(Momentum)2.1 公式2.2 PyTorch 实现三、AdaGrad 算法3.1 公式3.2 PyTorch 实现四、RMSProp 算法4.1 公式4.2 PyTorch 实现五、Adadelta 算法5.1 公式5.2 PyTorch 实现六、…...
JAVA设计模式——(1)适配器模式
JAVA设计模式——(1)适配器模式 目的理解实现优势 目的 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。 理解 可以想象成一个国标的插头,结果插座是德标的&…...
深入Docker核心技术:从Namespace到容器逃逸防御
深入Docker核心技术:从Namespace到容器逃逸防御 引言:容器技术的本质突破 Docker作为容器技术的代表,其革命性不仅在于轻量级虚拟化,更在于重新定义了应用交付的标准范式。本文将穿透表象,深入剖析Docker的核心技术实…...
面向对象设计中的类的分类:实体类、控制类和边界类
目录 前言1. 实体类(Entity Class)1.1 定义和作用1.2 实体类的特点1.3 实体类的示例 2. 控制类(Control Class)2.1 定义和作用2.2 控制类的特点2.3 控制类的示例 3. 边界类(Boundary Class)3.1 定义和作用3…...
【MySQL】004.MySQL数据类型
文章目录 1. 数据类型分类2. 数值类型2.1 tinyint类型2.2 bit类型2.3 小数类型2.3.1 float2.3.2 decimal 2.4 字符串类型2.4.1 char2.4.2 varchar2.4.3 char和varchar比较 2.5 日期和时间类型2.6 enum和set2.7 enum和set类型查找 1. 数据类型分类 2. 数值类型 2.1 tinyint类型 …...
使用docker在manjaro linux系统上运行windows和ubuntu
因为最近项目必须要使用指定版本的solidworks和maxwell(都只能在win系统上使用), 且目前的ubuntu容器是没有桌面的,导致我运行不了一些带图形的ros2功能。无奈之下,决定使用docker-compose写一下配置文件,彻底解决问题…...
Flask应用部署通用指南
IIS 部署 Python Flask 应用通用指南 目录 概述环境准备应用准备wfastcgi 配置IIS 网站配置权限配置静态文件处理安全配置性能优化常见问题与解决方案生产环境最佳实践 概述 将 Flask 应用部署到 Windows IIS 服务器上需要使用 WSGI 适配器(如 wfastcgi…...
数据驱动增长:大数据与营销自动化的结合之道
数据驱动增长:大数据与营销自动化的结合之道 在这个信息爆炸的时代,企业如果还靠拍脑袋做营销决策,那基本等同于闭着眼睛开车,撞上南墙只是时间问题。大数据和营销自动化的结合,让营销从传统的经验主义走向科学决策&a…...
[Java微服务组件]注册中心P3-Nacos中的设计模式1-观察者模式
在P1-简单注册中心实现和P2-Nacos解析中,我们分别实现了简单的注册中心并总结了Nacos的一些设计。 本篇继续看Nacos源码,了解一下Nacos中的设计模式。 目录 Nacos 观察者模式 Observer Pattern观察者模式总结 Nacos 观察者模式 Observer Pattern 模式定…...
Java—— 常见API介绍 第二期
Runtime 说明: Runtime表示当前虚拟机的运行环境 获取Runtime对象的方法是静态的,可以用类名调用 不能用new关键字创建Runtime对象,只能调用获取Runtime对象的方法获取对象 其他的方法不是静态的,不能直接用类名调用,…...
意志力的源头——AMCC(前部中扣带皮层)
AMCC(前部中扣带皮层)在面对痛苦需要坚持的事情时会被激活。它的存在能够使人类个体在面临困难的事、本能感到不愿意的麻烦事情时,能够自愿地去做这些事——这些事必须是局部痛苦或宏观的痛苦,即微小的痛苦micro-sucks。 AMCC更多…...
ProfiNet转DeviceNet边缘计算网关多品牌集成实践:污水处理厂设备网络融合全流程解析
一、行业背景 随着环保政策趋严,污水处理行业对自动化、数据实时性和设备兼容性需求激增。传统污水处理厂普遍存在设备协议异构(如DeviceNet、ProfiNet混用)、数据孤岛严重的问题,现需通过捷米特DeviceNet转ProfiNet协议转换网关…...
CCLinkIE转EtherCAT边缘计算网关构建智能产线:跨协议设备动态组网与数据优化传输
一、行业背景 随着新能源汽车市场爆发式增长,汽车制造企业对产线效率、设备协同性及柔性生产能力的要求显著提升。传统产线多采用CC-LinkIEFieldBasic(CCLINKIEFB)协议的三菱PLC控制系统,而新一代伺服驱动设备普遍采用EtherCAT协…...