查找递归修改的正方形的周长

时间:2014-10-07 04:56:34

标签: c++ algorithm

我有一个边长为1的正方形。现在,在每一秒之后,L方的每个方格将分成四个方L / 2的每个方格。

enter image description here

我需要计算得到的数字的总周长,其中总周长定义为结果图中所有线段的长度之和。例如,左侧图片的总周长为4L,而右侧的图片总周长为6L - 4L来自常规方形边,而2L来自内部线段。

我的代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define mod 1000000007

int main() {



        int s;
        cin>>s;
       long long  int ans=4;

        for(int i=1;i<=s;i++)
            ans+=1<<i;
            ans=ans%mod;

        cout<<ans<<endl;


    return 0;
}

由于最终答案可能不适合64位有符号整数,因此我需要以1000000007为模计算答案。

例如,0秒后,长度为4。 1秒后,长度为6。 我没有得到正确的输出。请帮忙

4 个答案:

答案 0 :(得分:1)

递归求解 - 让P(L, n)成为n次迭代后获得的数字的“周长”,从LxL平方开始。所以,P(L, n+1) = 4*P(L/2,n) - 2*L。此外,由于周长是线性的P(L/2, n) = P(L, n)/2,因此会为您提供P(L,n) = 2*P(L,n-1) - 2*L。替换L=1并运行循环。

   int s;
   cin>>s;
   long long  int ans=4;

   for(int i=1;i<=s;i++)
   {
        ans = 2*(ans-1);
        ans=ans%mod;
   }

答案 1 :(得分:0)

s秒后的周长为:4 + 2(2 ^ s-1) 所以,

int main()
{
    int s;
    cout << "Enter Time: ";
    cin >> s;
    cout << "Perimeter = " << (4 + 2 * (pow( 2, s ) - 1));
}

答案 2 :(得分:0)

你有一个不可分割的广场。当你将正方形分成4个相等的正方形时,你实际上是增加了初始边界的一半。原始正方形的外壁按原样包含在新的周边中,并且在其内部绘制2条线的长度,每条线的长度等于正方形的边。 noOfsqaures = 1; oldSide = 1; //one sqaure of side 1 oldPerimeter = 4*oldSide; loop for the number of seconds newPerimeter = oldPerimeter + 2*oldSide*noOfSquares oldSide = oldSide/2; //for the next iteration oldPermiter = newPermeter //for the next iteration noOfSquares = noOfSquares*4;

答案 3 :(得分:0)

o / p:4(初始值)+     2 + 4 + 8 + 16 + 32 + ......

我认为它可以帮助您进行编码。如果您需要,我会给您代码

for(int i=1;i<=s;i++)
{
  ans+=1<<i;
}