bnuoj_24430 Tiling

来源:互联网 发布:如何做销售数据分析表 编辑:程序博客网 时间:2024/05/16 09:21

n how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles?

Here is a sample tiling of a 2x17 rectangle.


Input

Input is a sequence of lines, each line containing an integer number 0 <= n <= 250.

Output

For each line of input, output one integer number in a separate line giving the number of possible tilings of a 2xn rectangle.

Sample Input

2812

Sample Output

31712731
//递推加大数(正数)相加#include<stdio.h>#include<string.h>int a1[100],b1[100];char c[120];int f(int x,int y){return x>y?x:y;}void add(char *a,char *b){int lena,lenb,i,j,k,flag;lena=strlen(a);lenb=strlen(b);memset(a1,0,sizeof(a));memset(b1,0,sizeof(b));memset(c,0,sizeof(c));for(i=0;i<lena;i++) a1[i]=a[i]-'0';for(j=0;j<lenb;j++) b1[j]=b[j]-'0'; if(lenb>=lena){  //判断长度                 for(i=lena-1,j=lenb-1;i>=0&&j>=0;i--,j--) {b1[j]+=a1[i];} //从低位到高位计算  for(i=lenb-1;i>=1;i--)  //从低位到高位进位  {  if(b1[i]>=10) {   b1[i-1]+=b1[i]/10;   b1[i]%=10;  }  }   flag=0;    //判断是否有前置 1 if(b1[0]>=10) {flag=1;b1[0]%=10;}  if(flag) {j=1;c[0]='1';} else {j=0;}    for(i=j,k=0;k<lenb;k++,i++)  //赋值到全局变量c[i]=b1[k]+'0';c[i]='\0';               }    else{    for(i=lena-1,j=lenb-1;i>=0&&j>=0;i--,j--) {a1[i]+=b1[j];} for(i=lena-1;i>=1;i--)  {  if(a1[i]>=10) {   a1[i-1]+=a1[i]/10;   a1[i]%=10;  }  }  flag=0; if(a1[0]>=10) {flag=1;a1[0]%=10;}  if(flag) {j=1;c[0]='1';} else {j=0;}    for(i=j,k=0;k<lena;k++,i++)c[i]=a1[k]+'0';c[i]='\0';}                      }int main(){ char c1[251][120]; int n,i;  strcpy(c1[0],"1");     strcpy(c1[1],"1");    strcpy(c1[2],"3"); for(i=3;i<=250;i++) {   add(c1[i-2],c1[i-1]);strcpy(c1[i],c);  add(c1[i],c1[i-2]);strcpy(c1[i],c); }while(~scanf("%d",&n)){printf("%s\n",c1[n]);}return 0;}




0 0
原创粉丝点击