正着想比较复杂,倒着想感觉还可以;
思考最后一个字符只可能有三种情况:E,F,O;
最后总的涂法为F(n);
当是E的时候倒数第二个字符可以随便涂,因而为此涂法数为:F(n-1);
当是F的时候倒数第二个字符也可以随便涂,因而为此涂法数也为:F(n-1);
当是O的时候
倒数第二个字符不能随便了,因为连续的2个O是不符合要求的,因此O的时候又被分为二种情况为E或F。
在最后2个字符为EO的情况下,倒数第三个字符可以随便,因此此涂法为F(n-2);
在最后2个字符为FO的情况下,倒数第三个字符也可以随便,因此此涂法也为F(n-2);
此时已经讲所有的情况考虑完毕,F(n)=2*F(n-1)+2*F(n-2);
程序如下:(此程序给出不用数组,用迭代即可;)
#include <stdio.h>
#include <string.h>
#include <iostream>
#define MAXL 50
using namespace std;
void plating(__int64 aniu[],int n);
int main()
{
__int64 aniu[MAXL];
//freopen("in.txt","r",stdin);
int n;
plating(aniu,MAXL);
while(scanf("%d",&n)!=EOF)
{
printf("%I64d\n",aniu[n]);
}
return 0;
}
void plating(__int64 aniu[],int n )
{
aniu[1]=3;
aniu[2]=8;
int i;
for(i=3; i<n; i++)
{
aniu[i]=2*aniu[i-1]+2*aniu[i-2];
}
}