注意:这里需要处理数,因为到后面数太大,long long int 也不能胜任
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #define Max 1005 using namespace std; long long a[Max][Max]; void hanshu() { int i,j; memset(a,0,sizeof(a)); a[1][0]=1;a[2][0]=2;a[3][0]=4;a[4][0]=7; for(i=5;i<=1000;i++) { for(j=0;j<=1000;j++) a[i][j]=a[i-1][j]+a[i-2][j]+a[i-4][j]; for(j=0;j<=1000;j++) { if(a[i][j]>=10) { a[i][j+1]+=a[i][j]/10; a[i][j]=a[i][j]%10; } } } } int main(void) { hanshu(); freopen("in.txt","r",stdin); int n; while(scanf("%d",&n)!=EOF) { int i=1000; while(i--) if(a[n][i]!=0) break; for(;i>=0;i--) printf("%d",a[n][i]); printf(" "); } fclose(stdin); system("pause"); return 0; }