XTU OJ 1525瓷片

题意

给定一个2n的地面,用11和1*2的瓷片铺满,问有多少种方案

数据范围

n<=30

输入

3
1
2
30

输出

2
7
1084493574452273

代码

#include

int main()
{
	int t;
	scanf("%d",&t);
	
	long long a[40];
	a[0]=1,a[1]=2,a[2]=7;
	for(int i=3;i<=30;i++)
	{
		a[i]=3*a[i-1]+a[i-2]-a[i-3];
	}
	
	while(t--)
	{
		int n;
		scanf("%d",&n);
		
		printf("%I64d\n",a[n]);
	}
	
	return 0;
}

想法

这个是c语言期末考试的一道中等题,计算出公式算是最难的一步,代码看起来还是比较简短

感觉还是不是很理解,还是先放一下吧,以后说不定能想清楚,最后一列是两个1或者一个竖着的2,最后两列是两个横着的2或者一个横着的2,两个1,最后三列是两行12和21,上下交换交换得到另一种

最后一列是2种情况,最后两列是3种情况,最后三列及之后的情况是2种情况

假设懂了以上的说法,可以列出一个式子
XTU OJ 1525瓷片_第1张图片
把推导出来的公式表示出来,因为超过了int范围,所以使用long long ,然后用数组把答案存下来,打表操作,每一次输入就查询一次答案并输出

还是看下网课打下基础,看以后能不能懂

你可能感兴趣的:(湘大,XTU,OJ,算法)