题意
给定一个2n的地面,用11和1*2的瓷片铺满,问有多少种方案
数据范围
n<=30
输入
3
1
2
30
输出
2
7
1084493574452273
代码
#include<stdio.h>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种情况
假设懂了以上的说法,可以列出一个式子
把推导出来的公式表示出来,因为超过了int范围,所以使用long long ,然后用数组把答案存下来,打表操作,每一次输入就查询一次答案并输出
还是看下网课打下基础,看以后能不能懂