第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 A-跳台阶

题目描述

  小明在坐景驰科技研发的无人车到达了目的地。
  景驰科技(JingChi.ai)是一家由人工智能技术驱动、以无人驾驶技术为核心的智能出行公司。它将打造面向中国市场的全无人驾驶。
  从无人车下来以后,小明看到了一个长长的楼梯。
  有一个n级台阶的楼梯,小明一次可以向上跳1步,两步,甚至是n步,请问小明跳到n级台阶有多少种跳法?

输入描述:

第一行输入一个整数t,代表有t组样例:( T<=30) 接下来的t行,都用一个整数n,表示楼梯有n级台阶( 1<=n<=30)

输出描述:

输出跳到第n级台阶有多少种跳法
示例1

输入

1
1

输出

1
解题思路:这是一道规律题:每一步从1~n中选择i步跳上台阶,使得刚好跳到第n层。其实就是求1~n中选择几个数(可以重复)与顺序有关相加等于n即可。
再讲得通俗些就是现在n为3,你可以先跳1步,再跳2步到第3层,也可以先跳2步,再跳1步到第3层;可以跳3步直接到第3层,也可以分3次跳1步到第3层,按照这样的规律来找即可找出答案。
下面举4个栗子:(等号左边的数进行排列得到组合个数)
当n=1时,只有一种排列组合:1=1
当n=2时,有如下排列组合:
1+1=2--->1种
2=2 --->1种
一共2种。
当n=3时,有如下排列组合:
1+1+1=3--->1种
1+2=3 --->2种
3=3 --->1种
一共4种。
当n=4时,有如下排列组合:
1+1+1+1=4--->1种
1+1+2=4 --->3种
2+2=4 --->1种
1+3=4 --->2种
4=4  --->1种
一共8种。
由前几项 1 2 3 4 5 ... n
1 2 4 8 16... 2^(n-1)
可知规律就是a[i]=2*a[i-1].水题。。。
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long a[35]={0};
 4 int main()
 5 {
 6     a[1]=1;
 7     for(int i=2;i<35;++i)
 8         a[i]=a[i-1]*2;
 9     int t,n;
10     cin>>t;
11     while(t--){
12         cin>>n;
13         cout<<a[n]<<endl;
14     }
15     return 0;
16 }
 
posted @ 2018-03-24 13:52  霜雪千年  阅读(652)  评论(0编辑  收藏  举报