C++知识点总结(21):递推算法

递推、逆推算法

  • 一、斐波那契数列
    • 1. 基础知识
    • 2. 审题
    • 3. 参考答案
  • 二、P2437 蜜蜂路线
    • 1. 审题
    • 2. 参考答案
  • 三、杨辉三角
    • 1. 基础知识
    • 2. 审题
    • 3. 参考答案
  • 四、猴子分桃
    • 1. 审题
    • 2. 思路
    • 3. 参考答案
      • 递推算法
      • 递归算法
  • 五、偶数个5
    • 1. 审题
    • 2. 参考答案
  • 习题
    • 1. 赶鸭子
      • 1.1 审题
      • 1.2 参考答案
    • 2. 台阶问题
      • 2.1 审题
      • 2.2 参考答案
    • 3. 偶数个3
      • 1. 审题
      • 2. 参考答案
  • 彩蛋

一、斐波那契数列

1. 基础知识

斐波那契数列是由 < 1 , 1 , 2 , 3 , 5 , 8 , . . . > <1, 1, 2, 3, 5, 8, ...> <1,1,2,3,5,8,...> 构成的一串无线序列,其基础项是前两项 1 1 1 1 1 1,从 3 3 3 开始求解方法为 f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) + f(n-2) f(n)=f(n1)+f(n2)

2. 审题

题目描述

斐波那契数列是这样的数列:数列的第一项和第二项都为 1 1 1,接下来的每一项都等于前面两项之和。给出一个整数 n n n,输出斐波那契数列前n项。

输入描述

一行,包含一个整数 n n n

输出描述

一行,斐波那契数列前 n n n 项,两个数字之间以一个空格隔开

样例1

输入

4

输出

1 1 2 3

提示

1 ≤ n ≤ 20 1 \le n \le 20 1n20

3. 参考答案

#include <iostream>
using namespace std;long long n;
long long f[25] = {0, 1, 1};int main()
{cin >> n;for (int i = 1; i <= n; i++){if (i <= 2){cout << 1 << " ";continue;}f[i] = f[i-1] + f[i-2];cout << f[i] << " ";}return 0;
}

二、P2437 蜜蜂路线

1. 审题

题目描述

一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 M M M 开始爬到蜂房 N N N M < N M<N M<N,有多少种爬行路线?例如从蜂房 1 1 1 爬到蜂房 3 3 3,有两种方法,分别是 1 − 3 1-3 13 1 − 2 − 3 1-2-3 123

输入描述

一行,包含两个正整数 M M M N N N,表示蜜蜂爬行的起点和终点。

输出描述

一个整数,表示爬行路线有多少种

样例1

输入

1 14

输出

377

提示

1 ≤ M < N ≤ 20 1 \le M < N \le 20 1M<N20

2. 参考答案

#include<iostream>
using namespace std;int s, e;
int l[25] = {0, 1, 2};int main()
{cin >> s >> e;for (int i = 3; i <= e-s+1; i++){l[i] = l[i-1] + l[i-2];}cout << l[e-s];return 0;
}

三、杨辉三角

1. 基础知识

1 1 1
1 1 1 1 1 1
1 1 1 2 2 2 1 1 1
1 1 1 3 3 3 3 3 3 1 1 1
1 1 1 4 4 4 6 6 6 4 4 4 1 1 1

规律
f ( i , j ) = f ( i − 1 , j − 1 ) + f ( i − 1 , j ) f(i,j) = f(i-1,j-1)+f(i-1,j) f(i,j)=f(i1,j1)+f(i1,j)
用文字表述,即某一项相当于这一项左上方那一项加上这一项上方那一项

基础项
仅仅只有第一行的 1 1 1

2. 审题

题目描述

满足如下图所示规律的三角形称为杨辉三角。输入一个正整数 n n n 表示三角形的层数,在控制台打印出该杨辉三角。

输入描述

输入文件名:tria.in
一行,包含一个正整数 n n n 0 < n < 21 0<n<21 0<n<21

输出描述

输出文件名:tria.out
杨辉三角前 n n n

样例1

输入

3

输出

1
1 1
1 2 1

提示

0 < n < 21 0<n<21 0<n<21

3. 参考答案

#include <iostream>
#include <cstdio>
using namespace std;int n;
int a[25][25];int main()
{freopen("tria.in", "r", stdin);freopen("tria.out", "w", stdout);cin >> n;a[0][0] = 1; // 基础项for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){a[i][j] = a[i-1][j-1] + a[i-1][j];cout << a[i][j] << " ";}cout << endl;}fclose(stdin);fclose(stdout);return 0;
}

四、猴子分桃

1. 审题

题目描述

海滩上有一堆桃子, N N N 只猴子来分。第一只猴子把这堆桃子中的一个扔入海中,然后将剩余的桃子平均分成两份,最后这只猴子拿走了 1 1 1 份。第二只猴子来了接着把剩下的桃子中的一个扔入海中,然后把剩余的桃子平均分成 2 2 2 份,开开心心拿走了 1 1 1 份。第三、第四、……,第 N N N 只猴子都是将剩下的桃子中的一个扔入海中,然后将剩余的桃子平均分成 2 2 2 份,并拿走其中的 1 1 1 份。最后只剩下 1 1 1 个桃子。编写程序,输入猴子的数量 N N N,输出海滩上原有多少桃子。

输入描述

一行,包含一个正整数 N N N 0 < N < 21 0<N<21 0<N<21

输出描述

一个整数, 海滩上原有多少桃子

样例1

输入

2

输出

7

提示

0 < N < 21 0<N<21 0<N<21

2. 思路

通过逆推的方式,我们求得:
f ( n ) = f ( n − 1 ) × 2 + 1 f(n)=f(n-1)\times2+1 f(n)=f(n1)×2+1

3. 参考答案

递推算法

#include <iostream>
using namespace std;int n;
int a[25];int main()
{cin >> n;a[0] = 1;for (int i = 1; i <= n; i++){a[i] = a[i-1] * 2 + 1;}cout << a[n];return 0;
}

递归算法

#include <iostream>
using namespace std;int n; // n记得开全局// f(n)表示第n只猴剩下的桃子
int f(int x)
{if (x == n){return 1;}return f(x+1) * 2 + 1;
}int main()
{cin >> n;cout << f(0);return 0;
}

例如,按照输入样例的 2 2 2,程序会这么执行:
f ( 0 ) = f ( 1 ) × 2 + 1 f(0)=f(1)\times 2+1 f(0)=f(1)×2+1
f ( 1 ) = f ( 2 ) × 2 + 1 f(1)=f(2)\times 2+1 f(1)=f(2)×2+1
f ( 2 ) = 1 f(2)=1 f(2)=1
f ( 1 ) = 1 × 2 + 1 = 3 f(1)=1 \times 2 + 1=3 f(1)=1×2+1=3
f ( 0 ) = 3 × 2 + 1 = 7 f(0)=3 \times 2 + 1=7 f(0)=3×2+1=7

五、偶数个5

1. 审题

题目描述

在所有的 n n n 位数种,有多少个数中有偶数个数字 5 5 5?请让这个结果对 11111 11111 11111 进行取模。

输入描述

一行,包含一个正整数 n n n 0 < n < 50 0<n<50 0<n<50

输出描述

一个整数,输出有多少个数中有偶数个数字 5 5 5

样例1

输入

2

输出

73

提示

0 < n < 50 0<n<50 0<n<50

2. 参考答案

#include <iostream>
using namespace std;int n;
int ou[55];
int ji[55];int main()
{cin >> n;ou[1] = 9;ji[1] = 1;for (int i = 2; i <= n-1; i++){ou[i] = (ou[i-1] * 9 + ji[i-1] * 1) % 11111;ji[i] = (ou[i-1] * 1 + ji[i-1] * 9) % 11111;}cout << (ou[n-1] * 8 + ji[n-1] * 1) % 11111;return 0;
}

习题

1. 赶鸭子

1.1 审题

一个人赶着鸭子到每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只,经过一个村子后还剩 n n n 只鸭子,求出发时共赶多少只鸭子。

1.2 参考答案

#include <iostream>
using namespace std;int n;int main()
{cin >> n;for (int i = 1; i <= 7; i++){n = (n + 1) * 2;}cout << n;
}

2. 台阶问题

2.1 审题

题目描述

台阶总共有 n n n 级,一次可以上 1 1 1 级,也可以上 2 2 2 级,也可以上 3 3 3 级,上 n n n 级台阶,总共有多少种走法?

输入描述

1 1 1 行,为一个正整数 n n n,表示台阶的数量。

输出描述

共一行,为一个正整数,表示走法数量。

样例1

输入

3

输出

4

提示

0 < n < 21 0<n<21 0<n<21

2.2 参考答案

#include <iostream>
using namespace std;int n;
int a[25] = {0, 1, 2, 4};int main()
{cin >> n;for (int i = 4; i <= n; i++){a[i] = a[i-1] + a[i-2] + a[i-3];}cout << a[n];return 0;
}

3. 偶数个3

1. 审题

题目略

2. 参考答案

#include <iostream>
using namespace std;int n;
int ou[55];
int ji[55];int main()
{cin >> n;ou[1] = 9;ji[1] = 1;for (int i = 2; i <= n-1; i++){ou[i] = (ou[i-1] * 9 + ji[i-1] * 1) % 11111;ji[i] = (ou[i-1] * 1 + ji[i-1] * 9) % 11111;}cout << (ou[n-1] * 8 + ji[n-1] * 1) % 11111;return 0;
}

彩蛋

后期预告

下一期是模拟算法哦,千万不要错过!

C++冷知识

C++ 提供了异常处理机制,允许程序在遇到错误时跳过函数调用链并执行特定的错误处理代码,以实现错误恢复和程序稳定性!

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

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

相关文章

数据中心机房建设的真正挑战

在数字化时代&#xff0c;数据中心机房不仅是信息处理和存储的心脏&#xff0c;也是企业运营的核心枢纽。然而&#xff0c;在机房建设过程中&#xff0c;存在一系列概念上的误解和痛点。这些误区不仅影响了机房建设的质量和效率&#xff0c;也给企业的长期发展带来了潜在的风险…

了解RT-Thread

1.简介 1&#xff09;RT-Thread&#xff0c;全程是Real Time-Thread&#xff1b; 2&#xff09;嵌入式实时多线程操作系统&#xff1b; 3&#xff09;基本属性之一是支持多任务&#xff1b; 4&#xff09;某一时刻只能运行一个任务&#xff0c;每次对一个任务的执行时间很短…

[论文精读]Do Transformers Really Perform Bad for Graph Representation?

论文网址&#xff1a;[2106.05234] Do Transformers Really Perform Bad for Graph Representation? (arxiv.org) 论文代码&#xff1a;https://github.com/Microsoft/Graphormer 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼…

【什么是Mask R-CNN呢?】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Mask R-CNN Mask R-CNN&#xff08;Mask Region-based Convolutional Neural Network&#xff09;是一…

【ACM独立出版|武汉】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09;将于2024年3月22-24日在中…

深度学习基础(三)循环神经网络(RNN)

之前的章节我们初步介绍了卷积神经网络&#xff08;CNN&#xff09;&#xff1a; 深度学习基础&#xff08;二&#xff09;卷积神经网络&#xff08;CNN&#xff09;-CSDN博客文章浏览阅读2次。卷积神经网络&#xff08;CNN&#xff09;的应用领域广泛&#xff0c;尤其在图像处…

全国各地2024上半年软考报名费用汇总

注&#xff1a;因各地考试政策时有变化&#xff0c;因此下列报名价格仅供参考&#xff0c;大家需要以当地当年通知说明为准。 山东&#xff1a;每人每科68元 北京&#xff1a;每人每科57元 广东&#xff1a;纸笔科目按每人每科63元收取&#xff0c;机考科目&#xff08;信息…

如何使用Douglas-042为威胁搜索和事件应急响应提速

关于Douglas-042 Douglas-042是一款功能强大的PowerShell脚本&#xff0c;该脚本可以提升数据分类的速度&#xff0c;并辅助广大研究人员迅速从取证数据中筛选和提取出关键数据。 该工具能够搜索和识别Windows生态系统中潜在的安全漏洞&#xff0c;Douglas-042会将注意力放在…

Redis(十五)Bitmap、Hyperloglog、GEO案例、布隆过滤器

文章目录 面试题常见统计类型聚合统计排序统计二值统计基数统计 Hyperloglog专有名词UV&#xff08;Unique Visitor&#xff09;独立访客PV&#xff08;Page View&#xff09;页面浏览量DAU&#xff08;Daily Active User&#xff09;日活跃用户量MAU&#xff08;Monthly Activ…

8.4 OpenGL纹理和采样器:像素矩形

像素矩形 Pixel Rectangles 可以使用TexImage*D&#xff08;参见第8.5节&#xff09;向GL指定颜色、深度和某些其他值的矩形。这些命令的操作和参数中的一些与ReadPixels&#xff08;用于从帧缓冲区获取像素值&#xff09;共享&#xff1b;然而&#xff0c;关于ReadPixels的讨…

运营抖店为什么不能多选类目?什么类目适合新手来玩?

大家好&#xff0c;我是电商小布。 想要入驻抖音小店&#xff0c;必备的资质材料就是营业执照。 而执照上的范围&#xff0c;就是我们开店所能选择的经营类目。 有的小伙伴在开店的时候&#xff0c;并没有想明白自己是想要做什么&#xff0c;小店未来的发展方向是什么。 结…

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录&#xff1a;以架构师的能力标准去分析每个问题&#xff0c;过后由表及里分析问题的本质&#xff0c;复盘总结经验&#xff0c;并把总结内容记录下来。当你解决各种各样的问题&#xff0c;也就积累了丰富的解决问题的经验&#xff0c;解决问题的能力也将自然得到极大的…

如何在Shopee平台上进行家居类目选品:有效策略解析

在当今电商行业中&#xff0c;选择合适的产品进行销售至关重要。特别是在Shopee这样竞争激烈的平台上&#xff0c;卖家需要精心挑选家居产品&#xff0c;以提高市场竞争力和销售业绩。以下是一些有效的策略&#xff0c;可供卖家在Shopee平台上进行家居类目选品时参考。 先给大…

基于STM32 单片机智能台灯控制系统的设计

摘要:针对目前我国学生近视率呈现上升趋势、学生坐姿不良等问题,提出了一种基于STM32 单片机智能台灯控制系统。该系统以STM32 单片机为控制核心,通过人体检测模块判断是否有人,实现对台灯亮灭的控制;通过自动调光模块实时检测环境光照强度,利用PWM 脉冲宽度调制技术对台…

只为拿证,软考学哪个最简单?

如果你想在软考中选择一个适合的考试项目&#xff0c;我推荐你考取软考中级职称——系统集成项目管理工程师。接下来&#xff0c;我会详细介绍一下为什么选择这个考试项目。 系统集成项目管理工程师是我国的一个中级职称&#xff0c;该职称的考试由国家人力资源和社会保障部、…

MKdocs添加顶部公告栏

效果如图&#xff1a; docs/overrides下新建main.html &#xff0c;针对main.html文件 树状结构如下: $ tree -a . ├── .github │ ├── .DS_Store │ └── workflows │ └── PublishMySite.yml ├── docs │ └── index.md │ └──overrides │…

云原生之容器管理工具Portainer

1. 简介 前面文章我们讲Docker、Docker Compose和Docker Swarm都是在Linux系统上手工命令行去操作&#xff0c;在第一次安装的时候可以命令行&#xff0c;以后运维和CICD流程操作中&#xff0c;如果还要命令行去各个节点操作&#xff0c;操作就麻烦了&#xff0c;工作效…

每日学习总结20240222

每日总结 一旦停下来太久&#xff0c;就很难继续了 ——《一个人的朝圣》 20240222 1. 自定义逻辑 请设计一个函数single_track_logic,传入三个参数&#xff0c;第一个参数是int数组&#xff0c;第二个参数是一个int变量&#xff0c;第三个参数是一个以int为返回值&#xff0c…

Android中自定义View时尺寸需要注意的相关事项

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 在Android中自定义View时&#xff0c;一定要用dp或者sp不要用px&#xff0c;这样在不同的…

【0266】postmaster创建共享内存(shared memory)、信号量(semaphores)

1. 前言 postmaster守护进程的每次启动过程中,会先执行一次“共享内存、信号量的重置”。 创建或重新创建共享内存和信号量注意:在每个“生命周期”中,我们通常会分配相同的IPC密钥(如果使用SysV shmem和/或semas)。 这有助于确保在postmaster崩溃并重新启动的情况下,我…