hdu 1297

如果在f(n-1)的后面再加一个m,序列仍然是合法的,如果在f(n-2)后面再加一对ff,结果仍然是合法的,还有一种情况来着,就是如果结尾时mf的话,再在后面加f,结果会变成合法的,但是和f(n-2)后加ff重复,所以应该加ff.所以最后就是f(n)=f(n-1)+f(n-2)+f(n-4)了。

#include "stdio.h"
#include "string.h"

char s[1002][400];

int main()
{
 int n;
 int i,j;
 int len=1,l,carry;
 int a;
 char b[400],t;
 memset(s,0,sizeof(s));
 s[0][0]='1';
 s[1][0]='1';
 s[2][0]='2';
 s[3][0]='4';

 for(i=4;i<=1000;i++)
 {
  carry=0;
  for(j=0;j<len;j++)
  {
   a=(s[i-1][j]==0?0:(s[i-1][j]-'0'))+(s[i-2][j]==0?0:(s[i-2][j]-'0'))+(s[i-4][j]==0?0:(s[i-4][j]-'0'))+carry;
   if(a>=10)
   {
    carry=a/10;
    s[i][j]=a%10+'0';
   }
   else
   {
    s[i][j]=a+'0';
    carry=0;
   }
  }
  if(carry)
   s[i][len++]=carry+'0';
 }


 while(scanf("%d",&n)==1)
 {
  l=strlen(s[n]);
  memset(b,0,sizeof(b));
  strcpy(b,s[n]);
  for(i=0;i<l/2;i++)
  {
   t=b[i];
   b[i]=b[l-i-1];
   b[l-i-1]=t;
  }
  printf("%s\n",b);
 }

 return 0;
}

原文地址:https://www.cnblogs.com/Shirlies/p/2354987.html