1 2
3 8
分析:这是一道递推题,但是比一般的递推要复杂一点儿,需要考虑两种情况。
1、可以由 n - 1 个字符后面再加一个得到 n 个字符的情况,但是需要考虑 n - 1 个字符的最后一个字符是不是 O .
2、使用一个二维数组 nums [ n ][ 2 ] ,存储 n 个字符的情况。其中,nums [ n ][ 0 ] 存储最后一个字符是 O 的情况,nums [ n ][ 1 ]存储最后一个字符不是 O 的情况。
3、如果在 n - 1 个字符的后面加 O ,则 n - 1 个字符的最后一个字符不能是 O ,所以:nums [ n ][ 0 ] = nums [ n - 1 ][ 1 ] * 1
4、如果在 n - 1 个字符的后面加非 O 字符(E、F),则 n - 1 个字符的最后一个字符没有限制,所以:nums [ n ][ 1 ] = ( nums [ n - 1 ][ 0 ] + nums [ n - 1 ][ 1 ] ) * 2
import java.util.Scanner;
public class Main {
static long[][] nums = new long[40][2];
static {
nums[1][0] = 1;
nums[1][1] = 2;
for (int i = 2; i < 40; i++) {
nums[i][0] = nums[i - 1][1];
nums[i][1] = 2 * (nums[i - 1][0] + nums[i - 1][1]);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
System.out.println(nums[n][0] + nums[n][1]);
}
}
}原文地址:http://blog.csdn.net/u011506951/article/details/24740983