【每日蓝桥】4、一三年省赛JavaC组真题“第39级台阶”

深渊向深渊呼唤

你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

题目标题:第39级台阶

小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级,站在台阶前,他突然又想到一个问题:

如果我每一步只能迈上一个或两个台阶,先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步,那么上完39级台阶,有多少种不同的上法呢?

请你利用计算机的优势,帮助小明寻找答案,

要求提交的是一个整数

注意:不要提交解答过程,或其他的辅助说明文字

解题思路

本题采用递归的方法求解,其思想是和斐波那契数列是一样的,只不过是斐波那契数列的逆向运用,

我们每一步都有两种走法,即走一个台阶或两个台阶,这样我们剩下的台阶数就减少1个或者减少2个,同时我们的步数增加1,

所以我们只需要判断剩下的台阶数是不是0,如果剩下的台阶数是0,则说明已经上到顶层,这个时候再判断步数是否为偶数步即可。如果符合要求,记录方法数的变量加1.

答案源码:

package 一三年省赛真题;

public class Year2013_t4 {

	public static void main(String[] args) {
		f(39,0);
		System.out.println("方法有:" + answers);
	}
	
	static int answers = 0;		//定义符合要求的方法个数
	
	/**
	 * @param n 剩余的台阶数
	 * @param step 已经走过的步数
	 * */
	public static void f(int n,int step) {
		if (n<0) {
			return;
		}
		//如果剩余的台阶数为0说明已经走完,并且步数为偶数时,符合要求,
		if (n==0&&step%2==0) {
			answers++;	//方法加1
			return;
		}
		f(n-1, step+1);	//下一步是一个台阶
		f(n-2, step+1);	//下一步是两个台阶
	}

}

输出样例:

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

栏目