现在我们通过计算机编程对 3 乘 n 棋盘的不同的完美覆盖的总数进行计算。
任务
对 3 乘 n 棋盘的不同的完美覆盖的总数进行计算。
n 的值最大不超过 30.
2 8 12 -1
3 153 2131
目前知道的方法都是通过推到递推公式来解决的:
i)公式来源:
#include<stdio.h>
int horizontal(int n);
int vertical(int n);
int count(int n)
{
if(n % 2)
return 0;
return horizontal(n) + vertical(n);
}
int horizontal(int n)
{
if(n == 0)
return 1;
if(n == 1)
return 0;
return 2*vertical(n-1) + horizontal(n-2);
}
int vertical(int n)
{
if(n == 0)
return 0;
if(n == 1)
return 1;
return horizontal(n-1) + vertical(n-2);
}
int main()
{
int n;
scanf("%d",&n);
while(n != -1)
{
printf("%d\n",count(n));
scanf("%d",&n);
}
}