2047

这是我想的程序:

 #include <stdio.h>



int main()

{

int i, b[41] = {0, 1, 2, 6};

__int64 a[41] = {0, 3, 8, 22};

for (i = 4;i < 41;i++)

{

a[i] = a[i - 1] * 3 - b[i - 1];

b[i] = a[i - 1] - b[i - 1];

}

while (scanf("%d", &i)!=EOF)

{

printf("%I64d\n", a[i]);

}

return 0;

}

但是算法应该这个样子 

 当n=1时,fn=C(1,3)=3;

n=2            fn=C(1,2)+C(1,2)*C(1,3)=8;
n=3            fn=C(1,2)*C(1,3)+C(1,2)*(C(1,2)+C(1,2)*C(1,3))
                      =C(1,2)*(C(1,3)+C(1,2)+C(1,2)*C(1,3))
                    =2*(f1+f2);

数学归纳法可证得:fn=2*(fn-1+fn-2); 

如果末尾加的是E或F(总是可以的),显然是2*f(i-1),如果加的是O,则末2位一定是EO或FO,则为2*f(i-2),由加法原理.. 

posted @ 2009-04-08 12:49  yansirfuture  阅读(177)  评论(0编辑  收藏  举报