题目:
For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangular web page’s area, your job by now is to design a rectangular web page, whose length L and width W satisfy the following requirements:
1. The area of the rectangular web page you designed must equal to the given target area. 2. The width W should not be larger than the length L, which means L >= W. 3. The difference between length L and width W should be as small as possible.You need to output the length L and the width W of the web page you designed in sequence.
Example:
Input: 4 Output: [2, 2] Explanation: The target area is 4, and all the possible ways to construct it are [1,4], [2,2], [4,1]. But according to requirement 2, [1,4] is illegal; according to requirement 3, [4,1] is not optimal compared to [2,2]. So the length L is 2, and the width W is 2.
Note:
- The given area won't exceed 10,000,000 and is a positive integer
- The web page's width and length you designed must be positive integers.
翻译:
对于一个网页开发者,懂得如何设计网页的大小是很重要的事。因此,给定 一个长方形网页的面积,你现在的工作是设计一个长方形的网页,它的长和宽满足一下要求:
1. 你设计的长方形网页的面积必须等同于给定的面积。 2. 宽 W 不能大于长 L,也就是意味着 L>=W。 3. 长度 L 和宽度 W 的差距要尽量小。你需要输出你所设计的网页长 L 和宽 W 构成的序列。
例子:
输入: 4 输出: [2, 2] 解释: 目标面积是4,所有可能的构建方案是[1,4],[2,2],[4,1]。 但是根据要求2,[1,4]是不合理的;根据要求3,[4,1]相比于[2,2]不是更好的。因此长度 L为2,宽度 W 为2。
注意:
- 给定的面积不能超过10,000,000,并且是一个正数。
- 你设计的网页的长和宽必须是正数。
思路:
长度 L 从area的中间值sqrt(area)处开始扫描,若能整除,则宽自然为area/L。
C++代码(Visual Studio 2017):
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> constructRectangle(int area) {
vector<int> res;
for (int w = sqrt(area); w > 0; w--) {
if (area%w == 0) {
res.push_back(area / w);
res.push_back(w);
return res;
}
}
}
};
int main()
{
Solution s;
int area = 5;
vector<int> result;
result = s.constructRectangle(area);
cout << result[0] << " " << result[1];
return 0;
}