POJ 2506 Tiling(递推+大整数加法)

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2506 Tiling(递推+大整数加法)相关的知识,希望对你有一定的参考价值。

http://poj.org/problem?id=2506

题意:

 

思路:
递推。a[i]=a[i-1]+2*a[i-2]。

计算的时候是大整数加法。错了好久,忘记考虑1了...晕倒。

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 
 7 int n;
 8 char s[255][255];
 9 
10 void cacl(int i)
11 {
12     int k;
13     int len1 = strlen(s[i - 1]);
14     int len2 = strlen(s[i - 2]);
15     int flag = 0;
16     for (k = 0; k < len2; k++)
17     {
18         int x = s[i - 1][k] - \'0\' + 2 * (s[i - 2][k] - \'0\');
19         if (flag)
20         {
21             x += flag;
22             flag = 0;
23         }
24         if (x>9)
25         {
26             flag = x / 10;
27             x = x % 10;
28         }
29         s[i][k] = x + \'0\';
30     }
31     while (k < len1)
32     {
33         int x = s[i - 1][k] - \'0\';
34         if (flag)
35         {
36             x += flag;
37             flag = 0;
38         }
39         if (x>9)
40         {
41             flag = x / 10;
42             x = x % 10;
43         }
44         s[i][k] = x + \'0\';
45         k++;
46     }
47     if (flag)  s[i][k] = flag + \'0\';
48 }
49 
50 void init()
51 {
52     s[0][0] = \'1\';
53     s[1][0] = \'1\';
54     s[2][0] = \'3\';
55     for (int i = 3; i <= 250; i++)
56         cacl(i);
57 }
58 
59 int main()
60 {
61     init();
62     while (cin>>n)
63     {
64         int m = strlen(s[n]);
65         for (int i = m-1; i >= 0; i--)
66             cout << s[n][i];
67         cout << endl;
68     }
69 }

 

以上是关于POJ 2506 Tiling(递推+大整数加法)的主要内容,如果未能解决你的问题,请参考以下文章

poj2506 Tiling

poj 2506 Tiling(大数+规律)

POJ 2506 Tiling

9273:PKU2506Tiling

9273:PKU2506Tiling

递归--练习11--noi9273 PKU2506Tiling