给定区域大小的最近矩形/正方形

Udi*_*di -3 c# optimization

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

我该怎么做?

rya*_*son 5

将此代码片段作为一个区域,int并将宽度和高度计算为整数,使得宽度 * 高度 == 区域,并且它尽可能接近正方形。

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

注意:我不是 C# 程序员。这是最佳的,因为它可以最佳地满足要求,但在运行时间方面并不是最好的。这个解决方案是 O(sqrt(area)),这不是很好,因为对于 int 中的 n 位,面积可能是 2^n 的数量级。如果这太昂贵,您可以查看整数因式分解以获得更复杂的计算宽度的方法。