OJ刷题 第十四篇(递归较多)

news2024/11/26 3:29:27

23204 - 进制转换

时间限制 : 1 秒

内存限制 : 128 MB

将一个10进制数x(1 <= x <= 100,000,000)转换成m进制数(2<= m <= 16) 。分别用 ABCDEF表示10以上的数字。

输入

x m (1 <= x <= 100,000,000, 2<= m <= 16)

输出

m进制数

样例

输入

31 16

输出

1F

 答案:

#include<iostream>
using namespace std;
int main() {
	int x, m;
	cin >> x >> m;
	char arr[17] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	char s[32] = { 0 };
	int length = 0;
	while (x) {
		int r = x % m;
		s[length++] = arr[r];
		x /= m;
	}
	for (int i = length - 1; i >= 0; i--) {
		cout << s[i];
	}
	return 0;
}

分析:这道题在刚学C语言或者数据结构栈那里来写是比较难的,因为栈的一个应用就是可以用来求进制转换。由于这道题是2到16进制之间任意进制的转换,因此我们要定义一个数组用来表示每次取模后的字符。并初始化,比如本题中的arr数组,先递增存储,最后倒着打印即可。

本题难的地方就是构造那个arr数组用来存储每次取模后的的字符。最后要倒着打印,刚开始学C语言感觉这题很难,但是现在感觉就基础题!

是否通过:

31001 - 数字三角形(动态规划思想)

时间限制 : 1 秒

内存限制 : 128 MB

如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。

  1. 一步可沿左斜线向下或右斜线向下走;
  2. 三角形行数小于等于100;
  3. 三角形中的数字为0,1,…,99。

输入

测试数据通过键盘逐行输入

输出

最大值

样例

输入

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出

30

 答案:

#include<iostream>
using namespace std;
int main() {
	int n;
	int a[101][101] = { 0 };
	cin >> n;
	//输入数据,从下标1开始,对本题计算大有帮助
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			cin >> a[i][j];
		}
	}
	//计算
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			int max1 = a[i][j] + a[i - 1][j - 1];
			int max2 = a[i][j] + a[i - 1][j];
			int max = max1 > max2 ? max1 : max2;
			a[i][j] = max;
		}
	}
	//找最大值路径
	int MAX = a[n][1];
	for (int i = 2; i <= n; i++) {
		MAX = MAX > a[n][i] ? MAX : a[n][i];
	}
	cout << MAX << endl;
	return 0;
}

分析:这个题其实难度不算大,只是题目有点难度的思维逻辑。题目说到:

一步可沿左斜线向下或右斜线向下走

这个是什么意思呢?意思就是说对每个元素a[i][j],到这个元素的路径只能从两个地方得来:

1、加上a[i-1][j-1],得到一个路径值

2、加上a[i-1][j],得到一个路径值

每个点都只有这两种情况,然后选出值较大的那个作为这个点的路径值。直到算到最后一行,然后找出最后一行的最大值即可。

是否通过:

31002 - 走楼梯

时间限制 : 1 秒

内存限制 : 128 MB

楼梯有 N 级台阶,上楼可以一步上一阶,也可以一步上二阶。编一递归程序,计算共有多少种不同走法?

输入

一个整数,表示 N 级台阶

输出

整数,表示走法的数量

样例

输入

3

输出

3

 答案:

#include<iostream>
using namespace std;
int f1(int N) {
	if (N == 1) {
		return 1;
	}
	if (N == 2) {
		return 2;
	}
	return f1(N - 2) + f1(N - 1);
}
int main() {
	int N;
	cin >> N;
	int count = f1(N);
	cout << count << endl;
	return 0;
}

分析:这是初学C语言遇到的最多的问题,也是一个非常经典的问题。它的核心思想就是

f3=f1+f2

 一般能不用递归就不用,因为递归会消耗栈,问题规模大了,会重复计算很多,浪费时间。

是否通过:

 31003 - 兔子繁殖

时间限制 : 1 秒

内存限制 : 128 MB

有一种兔子,出生后一个月就可以长大,然后再过一个月一对长大的兔子就可以生育一对小兔子且以后每个月都能生育一对。现在,我们有一对刚出生的这种兔子,那么,n 个月过后,我们会有多少对兔子呢?假设所有的兔子都不会死亡。

输入

输入文件仅一行,包含一个自然数 n。

输出

输出文件仅一行,包含一个自然数,即 n 个月后兔子的对数。

样例

输入

5

输出

5

#include<iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	long long sum = 0;
	if (n == 1 || n == 2) {
		sum = 1;
	}
	else {
		long long int f1 = 1, f2 = 1;
		for (int i = 3; i <= n; i++) {
			sum = f1 + f2;
			f2 = f1;
			f1 = sum;
		}
	}
	cout << sum << endl;
	return 0;
}

分析:兔子繁殖问题就是一个著名的斐波那契数列。同样可以用递归,但是这里我没有用递归,性能会大幅度提高。

是否通过:

31004 - 骨牌铺法 (进阶版递归,二刷!!)

时间限制 : 1 秒

内存限制 : 128 MB

有 1×n 的一个长方形,用一个 1×1、1×2 和 1×3 的骨牌铺满方格。例如当 n=3 时为 1×3 的方格。

此时用 1×1、1×2 和 1×3 的骨牌铺满方格,共有四种铺法。如下图:

输入

n

输出

一共有多少种铺法

样例

输入

3

输出

4

 答案:

#include<iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	int sum = 0;
	if (n == 1) {
		sum = 1;
	}
	else if (n == 2) {
		sum = 2;
	}
	else if (n == 3) {
		sum = 4;
	}
	else {
		int f1 = 1, f2 = 2, f3 = 4;
		for (int i = 4; i <= n; i++) {
			sum = f1 + f2 + f3;
			f1 = f2;
			f2 = f3;
			f3 = sum;
		}
	}
	cout << sum << endl;
	return 0;
}

分析:这个题第一次遇到感觉难度非常大,一是觉得题目生疏很难,或者说没理解题目的意思。我们先来整理题目的意思,当然我们知道

如果是1*1的矩形,只有 1种填充方法

如果是1*2的矩形,有2种填充方法,一种是全部用1*1方形填充,一种是一个用1*2方形填充

如果是1*3的矩形,有4种填充,怎么算?一种是全部用1*1的填充,一种是前面一个位置用1*1的方形填充,后面两个位置用1*2的方形填充,一种是前面两个位置用1*2的填充,后面一个位置用1*1的填充,最后一种就是直接用1*3的填充。

如果是1*4的矩阵,那么第一个位置用1*1的方形填充,后面三个位置任意填充有4种,前面两个位置用1*2的方形填充,后面两个位置有2种,前面三个位置用1*3的方形填充,后面一个位置有1种,即公有1+2+4=7种。

我想到这里已经发现了,骨牌铺法也是一个递归问题,相比斐波那契数列,这个题深度更深

f4=f3+f2+f1

是否通过:

 

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

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

相关文章

功能齐全的 ESP32 智能手表,具有多个表盘、心率传感器硬件设计

相关设计资料下载ESP32 智能手表带心率、指南针设计资料(包含Arduino源码+原理图+Gerber+3D文件).zip 介绍 我们调查了智能手表项目的不同方面,并学会了集成和测试每个单独的部分。在本文中,我们将使用所学知识,结合使用硬件和软件组件,从头开始创建我们自己的智能手表。在…

存储资源调优技术——SmartDedupe智能数据重删、SmartCompression智能数据压缩技术

目录 SmartDedupe智能数据重删技术 SmartCompression智能数据压缩技术 SmartDedupe智能数据重删技术 基本概念 智能数据重删技术 是一种数据缩减技术&#xff0c;通过删除存储系统中的冗余数据块 减少数据占用的物理存储容量&#xff0c;节省存储空间&#xff08;会降低性能&a…

Java 基础入门篇(三)——— 数组的定义与内存原理

文章目录 一、数组的定义1.1 静态初始化数组1.2 动态初始化数组1.3 数组的访问 二、数组的遍历三、数组的内存图 ★3.1 Java 的内存分配3.2 数组的内存图3.3 两个数组变量指向同一个数组对象 四、数组使用的常见问题补充&#xff1a;随机数 Random 类 一、数组的定义 数组就是…

线程池~~

文章目录 线程池线程池实现API、参数说明线程池处理Runnable任务线程池处理Callable任务Executors工具类实现线程池定时器Timer定时器ScheduledExecutorService定时器 并发和并行线程的生命周期 线程池 线程池实现API、参数说明 线程池处理Runnable任务 线程池处理Callable任务…

Win11的两个实用技巧系列之修改c盘大小方法、功能快捷键大全

Win11 c盘无法更改大小什么原因?Win11修改c盘大小方法 有不少朋友反应Win11 c盘无法更改大小是怎么回事&#xff1f;本文就为大家带来了详细的更改方法&#xff0c;需要的朋友一起看看吧 Win11 c卷无法更改大小什么原因&#xff1f;有用户电脑的系统盘空间太小了&#xff0c;…

CTF权威指南 笔记 -第二章二进制文件-汇编原理

C语言的生命是从 源文件开始 的 每条C语言都必须要给翻译成 一系列的低级语言 最后 按照可执行文件格式打包 并且作为二进制文件保存起来 编译原理 我们需要使用编译器 是通过某种语言 等价输出另一个语言 可以分为前端和后端 前端 和机器无关 把源程序分解为组成要素 …

【Android入门到项目实战-- 7.4】—— 如何播放音频和视频

目录 一、播放音频 MediaPlayer的工作流程 具体代码实现 二、播放视频 具体代码实现 学完本篇文章可以收获如何播放音频和视频。 一、播放音频 播放音频需要使用MediaPlayer类实现&#xff0c;它对各种格式的音频文件提供了全面的控制方法&#xff0c;下面是MediaPlayer类…

Android 9.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(二)

1.前言 在9.0的系统rom定制化开发中,在原生系统SystemUI下拉状态栏的通知栏的背景是默认白色四角的背景,由于在产品设计中,需要把四角背景默认改成圆角背景,所以就需要分析系统原生下拉通知栏的每条通知的默认背景,然后通过熟悉systemui的通知栏流程,设置默认下拉状态栏…

ChatGPT探索系列之三:探究ChatGPT的训练、优化和应用方法

文章目录 前言一、ChatGPT训练原理二、采样和微调阶段三、采样和训练奖励模型阶段三、采样和训练奖励模型阶段总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有大量资料了&#xff0c;博主做个收口&#xff0c;会出一个ChatGPT探索系列的文章&#xff0c;帮助大家深入了…

数据库如何合理生成主键:UUID、雪花算法

目录 1.使用自增主键的弊端 2.主键生成算法 2.1.UUID 2.1.1.概述 2.1.2.JAVA中的UUID 2.2.雪花算法 2.2.1.概述 2.2.2.JAVA中使用雪花算法 1.使用自增主键的弊端 首先在实际工程中我们很少用1&#xff0c;2&#xff0c;3......这样的自增主键&#xff0c;原因如下&…

MRI 成像方法和脉冲序列整理

以下内容为MRI期末复习笔记&#xff0c;仅供复习参考使用。 成像方法 2D重建 反投影重建 傅里叶重建 运用中心截面定理&#xff0c;一个三维物体的二维投影的傅里叶变换精确地等于物体的傅里叶变换的中心截面 上述定理换成二维同理 重建步骤 1、取得投影 P ( r , ϕ ) P(r,…

一招解决ChatGPT对话经常中断问题:KeepChatGPT插件

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 在访问ChatGPT官网进行聊天时&#xff0c;经常遇到了『与服务器断开』Something wet …

C++语法(22)---- 哈希表的闭散列和开散列

C语法&#xff08;21&#xff09;---- 模拟map和set_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130354019?spm1001.2014.3001.5501 目录 1.哈希表的介绍 1.stl中的哈希表使用 2.比较 3.哈希的原理 4.哈希映射的方法 1.直接定址法 2.…

FreeRTOS 软件定时器

文章目录 一、软件定时器简介二、定时器服务/Daemon 任务三、单次定时器和周期定时器四、复位软件定时器1. 函数 xTimerReset()2. 函数 xTimerResetFromISR() 五、创建软件定时器1. 函数 xTiemrCreate()2. 函数 xTimerCreateStatic() 六、开启软件定时器1. 函数 xTimerStart()2…

条件构造器Wrapper

本文来说下mybatis-plus中的条件构造器Wrapper 文章目录 条件构造器程序实例 条件构造器 十分重要&#xff1a;Wrapper 我们写一些复杂的sql就可以使用它来替代&#xff01; 程序实例 测试一 Overridepublic List<OrderInfo> getOrderInfo() {// id等于2的数据QueryWrapp…

K210单片机的按键检测

这个图片是程序的效果&#xff0c;按下按键后蓝灯亮起&#xff0c;松开按键后蓝灯熄灭。 主要用的的就是函数的构造方法和使用方法&#xff1a; GPIO(ID,MODE,PULL,VALUE) GPIO 对象。 【ID】内部 GPIO 编号; 【MODE】GPIO 模式&#xff1b; GPIO.IN &#x…

保龄球游戏的获胜者、找出叠涂元素----2023/4/30

保龄球游戏的获胜者----2023/4/30 给你两个下标从 0 开始的整数数组 player1 和 player2 &#xff0c;分别表示玩家 1 和玩家 2 击中的瓶数。 保龄球比赛由 n 轮组成&#xff0c;每轮的瓶数恰好为 10 。 假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为&#xff1a; …

SpringMVC学习总结(三)SpringMVC获取请求参数的几种方法解决获取请求参数的乱码问题CharacterEncodingFilter过滤器

SpringMVC学习总结&#xff08;三&#xff09;SpringMVC获取请求参数的几种方法/解决获取请求参数的乱码问题/CharacterEncodingFilter过滤器 一、通过ServletAPI获取请求参数 将HttpServletRequest作为控制器方法的形参&#xff0c;此时HttpServletRequest类型的参数表示封装…

Elasticsearch --- 数据聚合、自动补全

一、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这…

山东专升本计算机第十章-计算思维

计算思维 分支主题 3 10.2计算思维与算法 考点 3 算法概论 算法就是对计算思维解决问题的方法的描述是计算机求解的核心和关键。 基本特征 • 有穷性 • 算法必须能执行有线各步骤之后停止 • 确定性 • 算法的每一个步骤都必须有明确的定义不应该在理解时产生二义性 • 可…