ACM 题目解答:统计方案

Description
在一无限大的二维平面中,我们做如下假设:
1、每次只能移动一格;
2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、走过的格子立即塌陷无法再走第二次。
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
Input
首先给出一个正整数C,表示有C组测试数据。
接下来的C行,每行包含一个整数n(n<=20),表示要走n步。 Output 请编程输出走n步的不同方案总数; 每组的输出占一行。
Sample Input

2
1
2

Sample Output

3
7
import java.util.*;
import java.io.*;


public class Main {

    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        int count = s.nextInt();
        for (int i = 0; i < count; i++) {
            int step = s.nextInt();
            int result = calculate(0, step);
            System.out.println(result);
        }
    }

    public static int calculate(int from, int step) {
        int result = 0;
        if (step == 1) {
            if (from == 0) {
                result = 3;
            } else if (from == -1) {
                result = 2;
            } else if (from == 1) {
                result = 2;
            }
        } else {
            step--;
            if (from == 0) {
                result = calculate(-1, step) + calculate(0, step) + calculate(1, step);
            } else if (from == -1) {
                result = calculate(-1, step) + calculate(0, step);
            } else if (from == 1) {
                result = calculate(1, step) + calculate(0, step);
            }
        }
        return result;
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注