给定面积大小的最近的矩形/正方形

时间:2015-02-23 10:14:01

标签: c# optimization

我需要在C#中给出一个区域大小的宽度和高度。 宽度和高度必须是尽可能接近正方形的整数。 例如 - Area = 100 - >宽度= 10,高度= 10 面积= 162 - >面积= 162 - >宽度= 18,高度= 9。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

将此代码段作为int提供给它,并将宽度和高度计算为整数,使得width * height == area,并尽可能接近正方形。

int width;
for (width = (int)Math.Ceiling(Math.Sqrt(area)); width > 1; --width) {
   if (area % width == 0) break;
}
int height = area / width;

注意:我不是C#程序员。这是最佳的,因为它最佳地满足了要求,但在运行时方面并不是最好的。该解决方案是O(sqrt(区域)),这不是很好,因为对于int中的n个比特,区域可以是2 ^ n的量级。如果这太贵了,你可以查看Integer Factorization以获得更复杂的计算宽度的方法。