(蓝桥杯)小组练习题:第39级台阶与李白喝酒——有边界情况的递归

本文介绍了一道关于数学趣味问题的编程挑战,探讨了使用递归方法解决小明上39级台阶的不同走法,最终答案为51167078种。同时,展示了另一个递归问题,涉及李白买酒和喝酒的场景,通过递归求解可能的情况数量。
摘要由CSDN通过智能技术生成

题目:第39级台阶(13年)

小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。

要求提交的是一个整数。

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

答案:51167078

思路:

用递归来实现走完39级台阶,再判断走的步数为奇数还是偶数,则为偶数答案自加;如果走的台阶数超过39级,就直接return(见代码3)。

代码:

#include<iostream>
using namespace std;

int ans=0;
void clameStep(int sum,int s){//递归 ,sum为台阶数,s为步数 
	if(sum==39){//走到了39级台阶 
		if(s%2==0){//步数为偶数 ,答案自加 
			ans++;
		}
		return ;
	} 
	if(sum>39) return ;//超过39级台阶结束 
	clameStep(sum+1,s+1);//走一级台阶 
	clameStep(sum+2,s+1);//走两级台阶 

}
int main()
{
	clameStep(0,0); 
	cout<<ans<<endl;
	return 0;
}

这是14年蓝桥杯的一道填空题

题目:

“李白街上走,提壶去买酒,遇店加一倍,见花喝一斗”, 途中,遇见5次店,见了10此花,壶中原有2斗酒,最后刚好喝
完酒,要求最后遇见的是花,求可能的情况有多少种?

代码:

#include<iostream>

using namespace std;

int ans=0;
void dfs(int sum,int s,int a,char ch){//递归 ,sum为买酒,s为喝酒,ch为当前在干啥
	if(sum==5)
        if(s==10)    //遍历两种情况,
            if(a==0)
                if(ch == 'b')   //最后必须是喝酒(因为如果倒数第二次喝完酒在去买酒(0*2仍然=0))这样会导致结果为27
                {
                    ans++;
                    return;   //递归边界:满足情况
                }
	if(sum>5 || s>10) return ;//递归边界:不满足情况
	dfs(sum+1,s,a*2,'a');//买酒*2
	dfs(sum,s+1,a-1,'b');//喝酒-1
}
int main()
{
	dfs(0,0,2,' ');
	cout<<ans<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值