这是我想的程序:
#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),由加法原理..