已知楼梯数量,可以每次走2级或3级,求不同的走法数
例如:楼梯一共有7级,一共有3种走法:2 2 3或2 3 2或3 2 2。
时间限制:1000
内存限制: 65536
输入
输入包含若干行,每行包括一个正整数N,代表楼梯级数,1<=N<=50,最后一行为0,表示测试结束。
输出
不同的走法数,每一行输入对用一行输出。
样例输入
7
0
样例输出
3
解析
先让输入能一直输入,再在循坏中判断这个数是否为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;
}