1 2
3 6
一看就是递推找规律的题,但是记得当时做这道题花了不少功夫,但是以前做过,现在想想挺好想的。
直接考虑 n >= 4 的情况,以后的方式数可以这么分情况:第 n - 1 项为第一项的颜色与否。
① n - 1 项与第一项颜色相同,那么则应该在 f [ n - 2 ] 后面直接加上第一项的颜色(因为 f [ n - 2 ] 不可能末项为第一项的颜色),那么第 n - 1 项则有两种选择, 第n项只有一种选择了。故,此方案的数量应该为 f [ n - 2 ] *2
② n - 1 项与第一项颜色不同,那么此方案的数量就为 f [ n - 1 ] 的数量,最后一项不能为第一项的颜色,不能为 n - 1 项的颜色,则第 n 项只有一种可能。方案数为 f [ n - 1 ]
所以,递推公式就出来了: f [ n ] = f [ n - 1 ] + f [ n - 2 ] * 2
代码如下:
#include <stdio.h> int main() { __int64 n; __int64 a[125]; a[1]=3; a[2]=6; a[3]=6; for (int i=4;i<=65;i++) { a[i]=a[i-1]+a[i-2]*2; } while (scanf ("%d",&n)!=EOF) { printf ("%I64d\n",a[n]); } return 0; }