递推得出公式:F(n)=F(n-1)+F(n-2)+F(n-4), n>=4. F(0)=1,F(1)=1,F(2)=1,F(3)=4.
用long long会WA,发现得用大数来做。得开一个二维数据F[1005][101],每一位保存4位整数。输出F[n]即可。输出要小心,得先输出第一个,再循环输出,位数不够4位得前补0。
AC代码如下:
#include<stdio.h>
int main(){
int n,i,j,k;
int a[1005][101]={0};
a[0][1]=1;
a[1][1]=1;
a[2][1]=2;
a[3][1]=4;
for(i=4;i<1005;i++){
for(j=1;j<101;j++){
a[i][j]+=a[i-1][j]+a[i-2][j]+a[i-4][j];
a[i][j+1]+=a[i][j]/10000;
a[i][j]=a[i][j]%10000;
}
}
while(scanf("%d",&n)!=EOF){
k=100;
while(!a[n][k--]);
printf("%d",a[n][k+1]);
for(;k>0;k--){
printf("%04d",a[n][k]);
}
printf("\n");
}
return 0;
}