Problem Description
在一无限大的二维平面中,我们做如下假设:
1、 每次只能移动一格;
2、 不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、 走过的格子立即塌陷无法再走第二次;
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
1、 每次只能移动一格;
2、 不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、 走过的格子立即塌陷无法再走第二次;
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
Input
首先给出一个正整数C,表示有C组测试数据
接下来的C行,每行包含一个整数n (n<=20),表示要走n步。
接下来的C行,每行包含一个整数n (n<=20),表示要走n步。
Output
请编程输出走n步的不同方案总数;
每组的输出占一行。
每组的输出占一行。
Sample Input
2 1 2
Sample Output
37
分析:
找规律题!!!
AC代码如下:
#include "iostream" using namespace std; int main(int argc, char* argv[]) { int n,m,i; int a[30],b[30]; //a数组表示第n步时向左右的路径数,b数组第n步时表示向上的路径数; a[1]=2; //用箭头画个草图就知道啦 b[1]=1; for (i=2;i<25;i++) //各步数之间规律如下 { a[i]=a[i-1]+2*b[i-1]; b[i]=a[i-1]+b[i-1]; } cin>>n; while(n--) { cin>>m; if (m>1) { cout<<2*a[m-1]+3*b[m-1]<<endl; } else { cout<<3<<endl; } } return 0; }