HNUCM 2018级《算法分析与设计》练习二题解

HNUCM 2018级《算法分析与设计》练习二题解

前言:
递归专题:
1、找递归结束条件
2、找递归方程


A:判断素数


题意:
直接给定一个数,然后要你判断它是不是素数

题解:
完全就是个大水题。。。。


B:对称矩阵


题意:
n维矩阵,判断它是不是对称矩阵

题解:
也没啥说的,只要判断a[i][j]==a[j][i]即可


C:矩阵对角求和


题意:
n为矩阵,求它的主对角线和它的副对角线的和

题解:
这题完全没坑点,就连long long都没设坑

直接求和即可:
主对角线:i=j
副对角线:i+j=n-1(以0开始记)


D:字符统计


题意:
给一个字符串,判断大写字母、小写字母、阿拉伯数字和空格的个数

题解:
直接遍历一下即可


E:递归求和


题意:
用递归,求以下数列的前n项:
s=1-1/2+1/3-1/4+1/5-1/6+…

题意:
找到递归结束条件

if(n==1)
	return 1;
else
	return f(n-1)+1.0/n;

F:斐波那契数


题意:
多组输入,每组输入给定n
求第n个斐波拉契数(只输出最后六位)

题解:
这题如果用暴力递归的话,肯定会tle(超时)
于是就必须用数组存了,以空间换时间


G:蜂房


题意:
走蜂房;多组数据,给定起点和终点,求有多少种走法

题解:

if(n==1)
	return 1;
else if(n==2)
	return 2;
else
	return f(n-1)+f(n-2);

H:数字求和


题意:
给出一个正整数n,求其每位数的和

题解:
学递归,就用递归写,直接从个位一直往前推即可,找好递归结束条件:n只剩一位数的时候

if(n/10==0)
	return n;
else
	return f(n/10)+n%10;

I:养兔子


题意:
某人收养一只兔子,成熟期为1天,求第n天有多少只兔子

题解:
同样找递归结束条件。

if(n==1)
	return 1;
else
	return f(n-1)*2;

J:XP的楼梯


题意:
xp跳楼梯,可以一次跳一级、一次跳两级、一次跳三级。
问跳到第n级有多少种方案

题解:
需要注意的是,xp的起始位置是第一级
于是找递归结束条件和递归方程

if(n==1)
	return 1;
else if(n==2)
	return 1;
else if(n==3)
	return 2;
else
	return f(n-1)+f(n-2)+f(n-3);

你可能感兴趣的:(算法分析与设计练习题-学习笔记)