一天,果姐想和男票一起去红高粱吃饭,但在到达红高粱之前,果姐要爬一段重邮最为可爬的楼梯—夺命天梯! 果姐每次爬楼梯可以跨一步(上一层台阶)或者跨三步(上三层台阶),果姐不会选择跨两层台阶,因为他觉得那样既不优雅,也不省时。果姐突然想知道,她可以用几种姿势(方式)走完这个n层的楼梯呢? 请聪明的你给她答案!
Input
第一行输入一个T,代表一个有几组测试数据; 之后T行每行输入一个数n,代表楼梯层数(n<=40)
Output
每组测试数据输出一个答案
Sample Input
6
1
2
3
4
5
10
Sample Output
1
1
2
3
4
28
#include <iostream> #include <stdio.h> using namespace std; int f(int n,int m) { if(n==0) return 1; else{ int i=1; int sum1=1,sum2=1; while(i<=n) { sum1*=i; sum2*=m; m--; i++; int x; for(x=2;x<=sum1;x++) { if(sum1%x==0&&sum2%x==0) { sum1/=x; sum2/=x; break; } } } return sum2/sum1; } } int main() { int a[100]={0},T,n; scanf("%d",&T); int i=1,t; while(i<=T) { scanf("%d",&n); if(n==3) a[i]=2; else if(n<3) a[i]=1; else { t=n/3; int y; if(n%3==0) y=t; else y=t+n-t*3; while(t>=0) { a[i]+=f(t,y); t--; y+=2; } } i++; } i=1; while(i<=T) { printf("%d\n",a[i]); i++; } return 0; }
1155

被折叠的 条评论
为什么被折叠?



