递推算法4(c++)

昆虫繁殖
【题目描述】
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月
产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵
长成成虫后的第一个月不产卵(过x个月产卵),问过z个月以后,共有成虫多少对?
0≤x≤20,1≤y≤20,X≤z≤50
【输入】
x,y,z的数值。
【输出】
过z个月以后,共有成虫对数。
【输入样例】
1 2 8
【输出样例】
37

cpp 复制代码
#include <iostream>
using namespace std;
long long a[110000] = {0};
long long b[110000] = {0};
long long c[110000] = {0};
int main()
{
	a[1] = 1;
	int x,y,z;
	cin>>x>>y>>z;
	for(int i = 2;i<=z+1;i++)
	{
		b[i] = a[i-x]*y;
		c[i] = b[i-1];
		a[i] = a[i-1]+c[i-1];
	}
	cout<<a[z+1];
	return 0;
}

踩方格
【题目描述】
有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b、走过的格子立即塌陷无法再走第二次;
c、只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法
只要有一步不一样,即被认为是不同的方案。
【输入】
允许在方格上行走的步数n(n≤20)。
【输出】
计算出的方案数量。
【输入样例】
2
【输出样例】
7

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
	int a[60] = {0};
	a[1] = 3;
	a[2] = 7;
	int n;
	cin>>n;
	for(int i = 3;i<=n;i++)
	{
		a[i] = a[i-1]*2+a[i-2];
	}
	cout<<a[n];
	return 0;
}

移动路线
【题目描述】
X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。
小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格中,蚂蚁从左下角的方格中移动到右上角的方格中,每步移动一个方格。蚂蚁始终在方格矩阵内移动,请计算出不同的移动路线的数目。对于1行1列的方格矩阵,蚂蚁原地移动,移动路线数为1;对于1行2列(或2行1列)的方格矩阵,蚂蚁只需一次向右(或向上)移动,移动路线数也为1......对于一个2行3列的方格矩阵,如下图所示:
(2,1) (2,2) (2,3)
(1,1) (1,2) (1,3)
蚂蚁共有3种移动路线:
路线1:(1,1) → (1,2) → (1,3) → (2,3)
路线2:(1,1) → (1,2) → (2,2) → (2,3)
路线3:(1,1) → (2,1) → (2,2) → (2,3)
【输入】
输入只有一行
包括两个整数m和n(0 < m+n ≤ 20),
代表方格矩阵的行数和列数,m、n之间用
空格隔开。
【输出】
输出只有一行,为不同的移动路线的数目。
【输入样例】
2 3
【输出样例】
3

cpp 复制代码
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	int n,m;
	cin>>n>>m;
	int a[60][60] = {0};
	for(int i = 0;i<n;i++)
	{
		a[i][0] = 1;
	}
	for(int i = 0;i<m;i++)
	{
		a[n-1][i] = 1;
	}
	
	for(int i = n-2;i>=0;i--)
	{
		for(int j = 1;j<m;j++)
		{
			a[i][j] = a[i][j-1]+a[i+1][j];
		}
	}
	cout<<a[0][m-1];
	
	return 0;
}

位数问题
【题目描述】
在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。
【输入】
读入一个数N(N≤7)。
【输出】
输出有多少个数中有偶数个数字3。
【输入样例】
2
【输出样例】
73

cpp 复制代码
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	int n;
	cin>>n;
	int sumx = 1;
	int sumd = 9;
	for(int i = 1;i<n;i++)
	{
		sumx = sumx*10;
		sumd = sumd+sumx*9;
	}
	int cnt = 0;
	for(int i = sumx;i<=sumd;i++)
	{
		int cnt2 = 0;
		int t = i;
		while(t!=0)
		{
			if(t%10==3) cnt2++;
			t = t/10;
		}
		if(cnt2%2==0) cnt++;
		cnt = cnt%12345;
	}
	cout<<cnt;
	
	return 0;
}
相关推荐
初夏睡觉7 分钟前
从0开始c++,但是重置版,第1篇(c++基本框架)
开发语言·c++
前端小白在前进12 分钟前
⭐力扣刷题:螺旋矩阵
算法·leetcode·矩阵
老赵聊算法、大模型备案5 小时前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
CoderYanger6 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
厕所博士6 小时前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
萌>__<新7 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
xu_yule7 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法
s09071367 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
老马啸西风8 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展
子夜江寒8 小时前
逻辑回归简介
算法·机器学习·逻辑回归