题意:有2×1和2×2两种规格的地板,现要拼2×n的形状,求共有多少种情况。
数据较大,需要高精度运算。
假设我们已经铺好了2×(n-1)的情形,则要铺到2×n则只能用2×1的地板
假设我们已经铺好了2×(n-2)的情形,则要铺到2×n则可以选择1个2×2或两个2×1,故可能有下列三种铺法
其中第三个会与铺好2×(n-1)的情况重复,故可以得到递推式a[i]=2*a[i-2]+a[i-1];
import java.math.*;
import java.util.*;
public class Main
{
public static void main (String[] args)
{
BigInteger [] a=new BigInteger[255]; //大数数组
a[0]=BigInteger.ONE; //初始化
a[1]=BigInteger.ONE;
a[2]=a[1].add(a[0].add(a[0]));
for (int i=3;i<=250;i++)
a[i]=a[i-1].add(a[i-2].add(a[i-2]));
Scanner cin = new Scanner(System.in); //输入打开
while (cin.hasNext()) //判断是否文件结束
{
int n=cin.nextInt();
System.out.println(a[n]); //输出
}
cin .close();//输入关闭
}
}