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]);
}
}
}