当前位置: 首页 > 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;以便在开发和运维过程中建立起稳定、可靠的基础设施和自动化流程。 常见的职位招聘描述 负责设计、实…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...