2015-08-24 142 views
-1

我正在解决这个问题,可以从N个单位长度的正方形形成多少个矩形。我遇到这个公式⌊3n/2⌋-1(n> 1),这是错误的公式。 任何人都可以解释这个公式和给定的代码。没有矩形形成的矩形

#include<stdio.h> 
#include<math.h> 

int main() 
{ 
int i,j,n,cnt=0; 
scanf("%d",&n); 
int k= sqrt(n); 
for(i=1;i<=k;i++) 
    for(j=i+1;i*j<=n;j++) 
     cnt++; 
cnt+=k; 
printf("%d",cnt); 
return 0; 
} 
+5

我投票关闭这一问题作为题外话,因为SO不是“解释我在做什么”的网站。如果您有特定问题,请发布[mcve]。 – Olaf

回答

1

总的想法是要找到矩形的每一个可能的整数长度,和每一个可能的宽度对于每个高度,使得正方形的矩形中的总数目由N(*)

编号k = sqrt(N)是为了摆脱冗余检查:如果宽度> k,则最大高度为< k,反之亦然,这意味着通过对称性,只需检查宽度< = k,因为这相当于检查高度< = k代替。注意整数投下来。

如上所述,外部循环只计算每个可能的宽度。 内部循环计算每个可能的高度,使得宽度*高度< = N。索引i + 1用于避免每次计算1x1平方(假设它不被视为矩形)。

当这些循环结合在一起时,将计算满足条件(*)的每个可能的矩形。

看到这个职位为什么你的公式不起作用:https://math.stackexchange.com/questions/881386/number-of-possible-rectangles-from-at-most-n-identical-squares