Computer Transformation

题意 从1开始 1变为01 0变为10 计数变换多少次后连续0序列的个数。

题解 找规律(菲波数)+大数相加

a[i]=a[i-1]+a[i-2]*2;

 1 #include <stdio.h>
 2 #include<iostream>
 3 #include<cstring>
 4 #define N 1001
 5 using namespace std;
 6 char a[N][N];
 7 
 8 int main()
 9 {
10     memset(a,'0',sizeof(a)); 
11     a[2][0]='1';
12     a[3][0]='1';
13     int i,j,d=1;
14     for(i=4;i<N;i++)//i控制行数 
15     {
16         d++;   //控制列数 
17         int c=0,s;  //c为进位指数的初值 
18         for(j=0;j<=d;j++)      //j控制列数的循环
19         {
20             s=a[i-1][j]-'0'+a[i-2][j]-'0'+a[i-2][j]-'0'+c;
21             c=s/10; //满十进位
22             a[i][j]=s%10+'0';   //满十的话,将舍位
23         }
24     }
25 
26     int t,n;
27 
28     char s[1000];
29 
30         while(~scanf("%d",&n))
31         {
32 
33         if(n==1)
34             puts("0");
35         else
36         {
37         int k=N-1;
38 
39         while(k--)
40 
41         {
42 
43             if(a[n][k]!='0') break;    //反向搜索第一个不为‘0’的字符
44 
45         }
46 
47         for(i=k;i>=0;i--)  //从后往前输出
48 
49             printf("%c",a[n][i]);
50 
51        printf("
");
52         }
53 
54     }
55 
56     return 0;
57 
58 }