给定一个区域,计算矩形的边长,使它们的长度相似

时间:2016-05-06 15:04:49

标签: algorithm width area

该区域是整数。

给定一个区域,我想绘制代表平方米的方块。因此,例如给定30个区域,我想绘制一个6 x 5或5 x 6的矩形,但不是2 x 15的矩形,因为这看起来太长而且很薄。

我也可以接受在最后一行中绘制较少的正方形,例如对于33个区域,我可以绘制6 x 5矩形和最后一行3个正方形。

我尝试了素数分解,但例如597我得到3和199,太长而且很薄。

我尝试了二次函数,使用公式

0 = x^2 + x - area 

所以我会将积极的解决方案作为一方使用,而另一方则是1个单位。

但是我没有得到整数结果,向上或向下舍入会修改结果区域。

还有其他想法吗?这有一个已知的算法吗? 这个问题:Fastest way to calculate rectangle sides from area?已经关闭,但我认为这是一个有效的问题。

2 个答案:

答案 0 :(得分:1)

计算区域的平方根;为你的身边上下四舍五入。如果它太小,请将较小的值加1。

示例:

  • sqrt(30)= 5. ???,所以我们得到5& 6,和5x6 = 30
  • sqrt(36)= 6,所以我们得到6x6 = 36
  • sqrt(48)= 6。???,所以我们得到6& 7,和6x7 = 42。把它弄到7x7 = 49,最后一行有1个方格(你说可以接受)。

答案 1 :(得分:0)

假设您更喜欢最接近正方形的形状,您可以从 sqrt(区域)的整数部分开始,逐个添加宽度和高度:

width=[sqrt(area)] // Integer part of Square root
heigh=width
while ((height*width)<area){
   if (height<width)
          {height=height+1}
   else 
          {width=width+1}
}