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
212
Sample Output
37
分析:初始点是一个能走3个方向的点(箭头向上),暂时称之为竖向点。它能产生一个竖向点(即初始点向上走),和两个横向点,
横向点是能走两个方向的点。而很明显,一个横向点会产生一个竖向点和一个横向点。所以统计好竖向的点a个和横向的点b个,则最
后的走法结果为a * 3 + b * 2。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while ((T--) != 0) {
int n = sc.nextInt();
int[] a = new int[21];
int[] b = new int[21];
a[1] = 1;
b[1] = 0;
for(int i = 2;i <= 20;i++){
int h = a[i-1] * 2 + b[i-1];
int s = a[i-1]+ b[i-1];
b[i] = h;
a[i] = s;
}
System.out.println(a[n]*3+b[n]*2);
}
}
}