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

C# 给定面积大小的最近矩形/正方形,c#,optimization,C#,Optimization,我需要导出一个宽度和高度,给定一个面积大小,单位为C。 宽度和高度必须是尽可能接近正方形的整数。 例如-面积=100-->宽度=10,高度=10 面积=162-->面积=162-->宽度=18,高度=9 我该怎么做呢?给这个代码段一个面积为int的整数,它将宽度和高度计算为整数,比如width*height==面积,并且尽可能接近正方形 int width; for (width = (int)Math.Ceiling(Math.Sqrt(area)); width > 1; --widt

我需要导出一个宽度和高度,给定一个面积大小,单位为C。 宽度和高度必须是尽可能接近正方形的整数。 例如-面积=100-->宽度=10,高度=10 面积=162-->面积=162-->宽度=18,高度=9


我该怎么做呢?

给这个代码段一个面积为
int
的整数,它将宽度和高度计算为整数,比如width*height==面积,并且尽可能接近正方形

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(area)),这不是很好,因为对于整数中的n位,面积可以是2^n。如果计算宽度的方法太昂贵,您可以研究更复杂的方法。

如果我理解您的意思,我可以给出建议:取数字的根并四舍五入。这将是给定大小的粗略近似值(它将接近平方)。但是,例如,如果你取162,向上舍入的根是13,那么162/13=12.46,这不好,因为它不是整数。为什么不使用
矩形f
?要找到最接近的匹配整数对,可以编写一个简单的循环。。