我正在研究脑筋急转弯问题,我有正确的解决方案,但希望澄清它是如何工作的。更具体地说,为什么这里需要该区域的平方根,并且每次解决方案递减到什么值,直到该区域模数w == 0?是否有使用该区域的平方根的几何原理?
解决方案:
public int[] constructRectangle(int area) {
int w = (int)Math.sqrt(area);
while (area%w!=0) w--;
return new int[]{area/w, w};
}
问题:
构造矩形添加到列表
对于Web开发人员,了解如何设计网页大小非常重要。因此,给定一个特定的矩形网页区域,您现在的工作是设计一个矩形网页,其长度L和宽度W满足以下要求:
您设计的矩形网页区域必须等于给定的目标区域。
宽度W不应大于长度L,这意味着L> = W.
长度L和宽度W之间的差异应尽可能小。
您需要按顺序输出您设计的网页的长度L和宽度W.
示例:
输入:4
输出:[2,2]
说明:目标区域是4,构建它的所有可能方法是[1,4],[2,2],[4,1]。 但根据要求2,[1,4]是非法的;根据要求3,与[2,2]相比,[4,1]不是最优的。所以长度L是2,宽度W是2。
答案 0 :(得分:0)
int w = (int)Math.sqrt(area);
找到最接近w
area
while (area%w!=0) w--;
递减w
,直到它分为area
且没有余数。
return new int[]{area/w, w};
如果w
分为area
且没有余数,则高度必须为area/w
。
从area
的平方根开始意味着您的矩形的高度和宽度尽可能接近。
当然,如果您的区域是素数而不是w = 1 h = area
。