第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 }