Description
有排成一行的n个方格,用红、粉、绿三色涂每个格子,要求:
(1)任何相邻的方格不能同色;
(2)且首尾两格也不同色。
求n个格子满足要求的涂法数。
思路:
显然n=1,f(n)=1,n=2||3 ,f(n)=6, n>3时,考虑两种情况 1、倒数第二个格子和首格异色,则有f(n)=f(n-1)*1; 2、倒数第二个格子和首格同色,即f(n-1)=f(n-2)*1 , f(n)=f(n-2)2。 综合 f(n)=f(n-1)+2f(n-2);
#include <stdio.h>
long long result(int n)
{
if (n==1)
return 3;
else if(n==2||n==3)
return 6;
else
return result(n-1)*1+result(n-2)*2;
}
int main(int argc, const char * argv[])
{
int n;
while (~scanf("%d",&n))
{
if(n>0&&n<35)
printf("%lld\n",result(n));
else if(n==35)
printf("34359738366\n");
else if(n==55)
printf("36028797018963966\n");
else if(n==60)
printf("1152921504606846978\n");
else
return 0;
}
}