我有一个边长为1的正方形。现在,在每一秒之后,L方的每个方格将分成四个方L / 2的每个方格。
我需要计算得到的数字的总周长,其中总周长定义为结果图中所有线段的长度之和。例如,左侧图片的总周长为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。 我没有得到正确的输出。请帮忙
答案 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;
}