题目内容:可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶,有的时候一次爬三个台阶。如果这个楼梯有n个台阶,小明一共有多少种爬法呢?n值从键盘输入。
输入格式:输入一个整数n,(1<=n<46)。
输出格式:输出当楼梯阶数是n时的上楼方式总数。
输入样例:1
输出样例:1
输入样例:4
输出样例:7
输入样例:24
输出1389537
这道题主要目标是找出楼梯为多少阶时会和前面几个不同阶数的楼梯的不同爬法产生关系,因为小明一次能爬1,2,3阶楼梯,那么就把当楼梯为1,2,3阶时的不同爬法算出来。当阶数n大于3时,先分情况看第一次爬多少阶,若为k则剩下n-k的台阶,可以写出如下代码。
#include<stdio.h>
int way(int n)
{
int num;
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
else num=way(n-1)+way(n-2)+way(n-3);
return num;
}
main()
{
int m,sum;
scanf("%d",&m);
sum=way(m);
printf("%d",sum);
}