在这里插入图片描述
是一道递推找规律的题,首先易知f(1)=3;f(2)=6;f(3)=6;f(4)=18;
现在考虑n>3的情况,若第n-1个格子和第一个格子不同,则为f(n-1);
若第n-1个格子和第1个格子相同,则第n-2个格子和第一个格子必然不同,此时为f(n-2)再乘第n个格子的颜色数,很显然第n个格子可以是第一个格子(也是第n-1个格子)的颜色外的另外两种,这样为2*f(n-2);
因此总的情况为f(n)=f(n-1)+2*f(n-2);
int main(){
int n;
long long a[55] = {0,3,6,6};
for(int i = 4;i < 55; i++){
a[i] = a[i-1] + 2*a[i-2];
}
while(scanf("%d", &n) != EOF){
printf("%I64d\n", a[n]);
}
return 0;
}
我没有看出来递归:强推也可以,不过递归思路是很好的。