题目:爬楼

已知楼梯数量,可以每次走2级或3级,求不同的走法数
例如:楼梯一共有7级,一共有3种走法:2 2 3或2 3 2或3 2 2。
时间限制:1000
内存限制: 65536
输入
输入包含若干行,每行包括一个正整数N,代表楼梯级数,1<=N<=50,最后一行为0,表示测试结束。
输出
不同的走法数,每一行输入对用一行输出。
样例输入
7
0
样例输出

解析
先让输入能一直输入,再在循坏中判断这个数是否为0。如果不是0,则输入该数;如果是0,则结束程序。
接着用函数dfs写出前几个能口算出方案数的台阶数,如:1、2、3,并利用前几个台阶数算出的结果套用公式n的方案数=(n-2)的方案数+(n-3)的方案数,
算出以后的n级台阶要用的方案数。最后导入主函数中,输出结果即可
公式由来
台阶数          方案数
1               0
2               1
3               1
4               (4-2)+(4-3)=>2级台阶的方案数+1级台阶的方案数=1+0=1
5               (5-2)+(5-3)=>3级台阶的方案数+2级台阶的方案数=1+1=2
6               (6-2)+(6-3)=>4级台阶的方案数+3级台阶的方案数=1+1=2
7               (7-2)+(7-3)=>5级台阶的方案数+4级台阶的方案数=2+1=3
n               (n-2)+(n-3)=>(n-2)级台阶的方案数+(n-3)级台阶的方案数

#include <iostream>
using namespace std;
int dfs(int n)
{
    if(n==1)
    {
    	return 0;
	} 
    else if(n==2)
    {
    	return 1;
	}
	else if(n==3)
	{
		return 1;
	}
    else if(n>3)
    {
    	return dfs(n-2)+dfs(n-3);
	}
}
int main()
{
	int n;
	while(cin>>n)
	{
		if(n>0)
		{
			int m=dfs(n);
			cout<<m<<endl;
		}
		else if(n==0)
		{
			return 0;
		}
    }
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值