当前位置: 首页 > news >正文

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

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

是否通过:

 

23207 - 五子棋(重点!!二刷!)

时间限制 : 1 秒

内存限制 : 128 MB

五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。如果要开发一款五子棋小游戏,判断棋局输赢也将是其中很重要的一部分。

现有一个n行m列的棋盘,我们使用1表示棋格里有黑色棋子,2表示棋格里有白色棋子,0表示没有棋子。 给定t场对弈棋局,请判断是否有5子连线的棋子,如果有则输出Yes,没有则输出No。

输入

第1行,n m t (1≤n、m≤100,1≤t≤10) 接下来共t组数据,每行组数据n行,每行m个整数,每个整数的取值为0、1或者2

输出

t 行,如果有5子连线的棋子则输出Yes,否则输出No。每行一个。

样例

输入

5 6 4
1 1 1 1 1 0
2 2 0 2 2 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 02 1 1 0 1 0
2 1 0 2 2 0
0 1 0 2 0 0
0 1 0 2 0 0
0 1 0 2 0 02 1 1 0 1 0
0 2 0 2 2 0
0 1 0 1 0 0
0 0 0 2 0 0
0 1 0 2 0 12 1 1 0 1 2
2 1 0 2 2 0
0 1 0 2 0 0
0 1 2 2 0 0
0 2 0 2 0 0

输出

Yes
Yes
No
Yes

答案:

#include<iostream>
using namespace std;
bool Check(int a[][200], int n, int m) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (a[i][j] != 0) {//判断右横if (j + 4 <= m &&a[i][j] == a[i][j+1] &&a[i][j] == a[i][j+2] &&a[i][j] == a[i][j+3] &&a[i][j] == a[i][j+4]) {return true;}//判断下竖if (i + 4 <= n &&a[i][j] == a[i+1][j] &&a[i][j] == a[i+2][j] &&a[i][j] == a[i+3][j] &&a[i][j] == a[i+4][j]) {return true;}//判断右斜if (j + 4 <= m && i + 4 <= n &&a[i][j] == a[i+1][j+1] &&a[i][j] == a[i+2][j+2] &&a[i][j] == a[i+3][j+3] &&a[i][j] == a[i+4][j+4]) {return true;}//判断左斜if (j >= 5 && i + 4 <= n &&a[i][j] == a[i+1][j-1] &&a[i][j] == a[i+2][j-2] &&a[i][j] == a[i+3][j-3] &&a[i][j] == a[i+4][j-4]) {return true;}	}}}return false;
}
int main() {int n, m, t;int a[200][200];cin >> n >> m >> t;for (int k = 1; k <= t; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];}}if (Check(a, n, m)) {cout << "Yes" << endl;}else {cout << "No" << endl;}}
}

分析:虽然很多人下过五子棋也知道下棋规则,但是要写代码判断一个棋局是不是分出胜负还是有不小难度的。五子棋游戏这是一款经典游戏,之前也开发来玩过。我们在判断的时候不用判断所有棋子,我们只需判断部分棋子就可以知道胜负,分四种情况:

1、右横,即某一行有5个棋子即可,只需判断最后一个棋子不超过棋盘的列数即可,即j+4<=m

2、下竖,即某一列有5个棋子即可,只需判断最后一个棋子的行数不超过棋盘的行数即可,即i+4<=n

3、右斜,即主对角线方向有5个棋子,两个条件,因为是斜着向右下方,因此j+4<=m且i+4<=n

4、左斜,即副对角线方向有5个棋子,同样是两个条件,因为是斜着向左下方,因此i+4<=n且j-4>=1,即只需j>=5即可!

是否通过:

相关文章:

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

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 答…...

FileZilla读取目录列表失败(vsftpd被动模式passive mode部署不正确)

文章目录 现象问题原因解决方法临时解决&#xff08;将默认连接方式改成主动模式&#xff09;从根本解决&#xff08;正确部署vsftpd的被动模式&#xff09; 现象 用FileZilla快速连接vsftpd服务器时&#xff0c;提示读取目录列表失败 问题原因 是我vsftpd服务端的被动模式没…...

【Java面试八股文】数据库篇

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 请你说说MySQL索引,以及它们的好处和坏处 请你说说MySQL的索引是什么结构,为什么不用哈希表 请你说说数据库索引的底…...

Android Glide加载图片、网络监听、设置资源监听

再搞事情之前首先创建一个项目&#xff0c;就命名为GlideDemo吧。    一、项目配置 创建好之后&#xff0c;在app模块下build.gradle的dependencies闭包中添加如下依赖&#xff1a; //glide//glideimplementation com.github.bumptech.glide:glide:4.11.0annotationProcess…...

等保定级报告模版

等保定级怎么做_luozhonghua2000的博客-CSDN博客 上篇给大家说清楚了,等保定级怎么做,但在日常工作中,需要向上级或甲方输出定级报告,这篇我降弄个模版供大家参考。 信息系统安全等级保护定级报告 XX 平台系统描述 (一) 2023年5月,XX 正式上线,XX 隶属于深圳 XX 科技…...

计算机组成原理4.2.2汉明码

编码的最小距离 奇校验和偶校验 看1的个数是奇数 还是偶数 汉明码 汉明码的配置 根据不等式&#xff0c;确定增添几位&#xff0c;根据指数放置增添位 汉明码的检错 分不同检测小组 分组规则&#xff1a;哪位为’1‘就是哪组元素。 1号位为‘1’的都是第一组元素&#…...

JavaScript全解析——本地存储的概念、用法详解

本地存储概念&#xff1a; 就是浏览器给我们提供的可以让我们在浏览器上保存一些数据 常用的本地存储 localStorage sessionStorage localStorage 特点: 1.长期存储,除非手动删除否则会一直保存在浏览器中&#xff0c;清除缓存或者卸载浏览器也就没有了 2.可以跨页面通讯,…...

对象浅拷贝的5种方式

参考原文:浅拷贝的五种实现方式 - 掘金 (juejin.cn) 哈喽 大家好啊 最近发现自己对对象都不是很熟练&#xff0c;特别是涉及到一些复制&#xff0c;深浅拷贝的东西 1.Object.assign 首先 我们创建一个空对象obj1 然后创建一个对象obj2 用object.assign(目标对象&#xff0c…...

Java每日一练(20230504)

目录 1. 位1的个数 &#x1f31f; 2. 移除元素 &#x1f31f; 3. 验证二叉搜索树 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 位1的个数 编写一个…...

【深度学习】计算机视觉(13)——模型评价及结果记录

1 Tensorboard怎么解读&#xff1f; 因为意识到tensorboard的使用远不止画个图放个图片那么简单&#xff0c;所以这里总结一些关键知识的笔记。由于时间问题&#xff0c;我先学习目前使用最多的功能&#xff0c;大部分源码都包含summary的具体使用&#xff0c;基本不需要自己修…...

项目经理在项目中是什么角色?

有人说&#xff0c;项目经理就是一个求人的差事&#xff0c;你是在求人帮你做事。 有人说&#xff0c;项目经理就是一个与人扯皮的差事&#xff0c;你要不断的与开发、产品、测试等之间沟通、协调。 确实&#xff0c;在做项目的时候&#xff0c;有的人是为了完成功能&#x…...

【技术分享】防止根据IP查域名,防止源站IP泄露

有的人设置了禁止 IP 访问网站&#xff0c;但是别人用 https://ip 的形式&#xff0c;会跳到你服务器所绑定的一个域名网站上 直接通过 https://IP, 访问网站&#xff0c;会出现“您的连接不是私密连接”&#xff0c;然后点高级&#xff0c;会出现“继续前往 IP”&#xff0c;…...

Baumer工业相机堡盟相机如何使用偏振功能(偏振相机优点和行业应用)(C#)

项目场景&#xff1a; Baumer工业相机堡盟相机是一种高性能、高质量的工业相机&#xff0c;可用于各种应用场景&#xff0c;如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能&#xff0c;可以实时传输高分辨率图像。此外&#xff0…...

无损以太网与网络拥塞管理(PFC、ECN)

无损以太网 无损以太网&#xff08;Lossless Ethernet&#xff09;是一种专门用于数据中心网络的网络技术&#xff0c;旨在提供低延迟、高吞吐量和可靠性的传输服务。它是在传统以太网的基础上进行了扩展&#xff0c;引入了新的拥塞管理机制&#xff0c;以避免数据包丢失和网络…...

爬虫大全:从零开始学习爬虫的基础知识

爬虫是一种自动获取网站信息的技术&#xff0c;它可以帮助我们快速地抓取海量网站数据&#xff0c;进行统计分析、挖掘和展示。本文旨在为初学者详细介绍爬虫的基础知识&#xff0c;包括&#xff1a;爬虫原理、爬虫分类、网页结构分析、爬虫工具和技能、爬虫实践示范&#xff0…...

【Python】【进阶篇】21、Django Admin数据表可视化

目录 21、Django Admin数据表可视化1. 创建超级用户2. 将Model注册到管理后台1)在admin.py文件中声明 3. django_admin_log数据表 21、Django Admin数据表可视化 在《Django Admin后台管理系统》介绍过 Django 的后台管理系统是为了方便站点管理人员对数据表进行操作。Django …...

【MySQL约束】数据管理实用指南

1、数据库约束的认识 数据库约束的概念&#xff1a;数据库的约束是关系型数据库的一个重要的功能&#xff0c;它提供了一种“校验数据”合法性的机制&#xff0c;能够保证数据的“完整性”、“准确性”和“正确性” 数据库的约束&#xff1a; not null&#xff1a;不能存储 nul…...

2023年第二十届五一数学建模竞赛C题:“双碳”目标下低碳建筑研究-思路详解与代码答案

该题对于模型的考察难度较低&#xff0c;难度在于数据的搜集以及选取与处理。 这里推荐数据查询的网站&#xff1a;中国碳核算数据库&#xff08;CEADs&#xff09; https://www.ceads.net.cn/ 国家数据 国家数据​data.stats.gov.cn/easyquery.htm?cnC01 以及各省市《统…...

Vue父组件生命周期和子组件生命周期触发顺序

加载渲染过程 父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted子组件更新过程 父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated父组件更新…...

DevOps工程师 - 面试手册

DevOps工程师 - 面试手册 岗位概述 DevOps工程师是一种专注于提高软件开发和运维团队协作、提高软件产品交付速度和质量的职位。这种角色要求具备跨领域的知识&#xff0c;以便在开发和运维过程中建立起稳定、可靠的基础设施和自动化流程。 常见的职位招聘描述 负责设计、实…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...