C++递归(2)

数塔问题?

题目描述: 有如下所示的数塔,要求从底层走到顶层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

输入 输入数据首先包括一个整数整数N(1 输出 从底层走到顶层经过的数字的最大和是多少?

输入复制

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

输出复制

30

#include<bits/stdc++.h>
using namespace std;
void func(int,int,int);
int a[110][110];
int ma=-1;
int n;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i+1;j++)
		{
			cin>>a[i][j];
		}
	}
	func(0,0,0);
	cout<<ma;
	
	
	return 0;
}
void func(int x,int y,int sum)
{
	if(x==n)
	{
		sum=sum+a[x][y];
		ma=max(ma,sum);
		return;
	}
	func(x+1,y,sum+a[x][y]);
	func(x+1,y+1,sum+a[x][y]);
}

摘花生问题

题目描述: Hello Kitty 想摘点花生送给她喜欢的米老鼠。她来 到一片有网格状道路的矩形花生地(如下图)

从西北 角进去,东南角出来。地里每个道路的交叉点上都 有种着一株花生苗,上面有若干颗花生,经过一株 花生苗就能摘走该它上面所有的花生。Hello Kitty只 能向东或向南走,不能向西或向北走。问Hello Kitty 最多能够摘到多少颗花生。

如输入:

2 2

1 1

3 4

代表有2行,每行有2株花生,那么摘能摘到的最多的花生就是: 1>>3>>4 = 8,总和为8颗花生。

#include<bits/stdc++.h>
using namespace std;
void func(int,int,int);
int a[110][110];
int ma=-1;
int n,m;
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	func(0,0,0);
	cout<<ma;
	
	
	return 0;
}
void func(int x,int y,int sum)
{
	if(x==n&&y==m)
	{
		sum=sum+a[x][y];
		ma=max(ma,sum);
		return;
	}
	if(x!=n)
	{
	    func(x+1,y,sum+a[x][y]);
	}
	if(y!=m)
	{
	    func(x,y+1,sum+a[x][y]);
	}
}

卒过河

题目描述: A 点有一个过河卒,需要走到目标 B 点。

卒行走规则:可以向下、或者向右。

同时在棋盘上的任一点有一个对方的马(如图的C 点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。

例如图中 C 点可以控制 9 个点(图中的P1,P2 … P8 和 C) 。

卒不能通过对方马的控制点。

棋盘用坐标表示,现给定A 点位置为(0,0)B 点位置为(n,m)(n,m 为不超过 10 的整数),马的 位置为C(X,Y)(约定: C点与A点不重叠,与B点也不重叠)。要求你计算出卒从 A 点能够到达 B 点的路径的条数。

样例

输入复制

6 6 3 2

输出复制

17

输入 B点的坐标(n,m)以及对方马的坐标(X,Y) (马的坐标一定在棋盘范围内,但要注意,可 能落在边界的轴上) 输出 到达b点的路径条数

#include<bits/stdc++.h>
using namespace std;
void func(int,int);
int a[110][110]={0};
int cnt=0;
int n,m;
int u,v;
int main()
{
	cin>>n>>m;
	cin>>u>>v;
	a[u][v]=1;
	a[u-2][v-1]=1;
	a[u-2][v+1]=1;
	a[u+2][v-1]=1;
	a[u+2][v+1]=1;
	a[u-1][v-2]=1;
	a[u+1][v-2]=1;
	a[u-1][v+2]=1;
	a[u+1][v+2]=1;
	func(0,0);
	cout<<cnt;
	
	
	return 0;
}
void func(int x,int y)
{
	if(a[x][y]==1)
	{
		return;
	}
	if(x==n&&y==m)
	{
		cnt++;
		return;
	}
	if(x!=n)
	{
	    func(x+1,y);
	}
	if(y!=m)
	{
	    func(x,y+1);
	}
}

流感传染

题目描述: 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为 一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得 了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不 变),空房间不会传染。请输出第m天得流感的人数。 输入 第一行一个数字n,n不超过100,表示有n*n的宿舍房间。 接下来的n行,每行n个字符,‘ . ’表示第一天该房间住着健康的人,’#’表示该 房间空着,’@’表示第一天该房间住着得流感的人。 接下来的一行是一个整数m,m不超过100. 输出 输出第m天,得流感的人数

样例输入

5

. . . .#

.#.@.

.#@. .

#. . . .

. . . . .

4

样例输出

16

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 07:08:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 07:08:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 07:08:04       82 阅读
  4. Python语言-面向对象

    2024-04-02 07:08:04       91 阅读

热门阅读

  1. 工业互联网和云计算有关联吗

    2024-04-02 07:08:04       32 阅读
  2. 【BUG】No module named ‘dnf‘

    2024-04-02 07:08:04       37 阅读
  3. 简易聊天室

    2024-04-02 07:08:04       35 阅读
  4. ubuntu重装mysql8

    2024-04-02 07:08:04       40 阅读
  5. React——setState 是同步还是异步问题

    2024-04-02 07:08:04       39 阅读
  6. 在Ubuntu 18.04上添加和删除用户的方法

    2024-04-02 07:08:04       33 阅读
  7. C#WPF设置圆角按钮样式

    2024-04-02 07:08:04       33 阅读
  8. ElasticSearch的DSL查询

    2024-04-02 07:08:04       40 阅读
  9. linxu tensorflow-1.13.1 C++动态库编译

    2024-04-02 07:08:04       33 阅读