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