问题描述:
问题分析:
1.暴力列举:根据所给面积数据,列举所有可能的因子组合,然后筛选;
2.数学分析:穿过问题表面分析可知本题旨在求一个数差值最小的两个因数;
完整代码:
1.暴力穷举+优化:
vector<int> res;
int min = area;
int L = 0, W = 0;
for (int w = 1; w <= area; w++)
{
if (area % w == 0)
{
int l = area / w;
if (l >= w && (l-w) < min)
{
L = l; W = w;
min = l-w;
if (min == 0)
break;
}
}
if (min == 0)
break;
}
res.push_back(L);
res.push_back(W);
return res;
2.最近两因子法:
vector<int> constructRectangle(int area)
{
vector<int> res;
int W = sqrt(area);
while (area % W != 0)
W--;
res.push_back(area / W);
res.push_back(W);
return res;
}
结果展示:
暴力法 356 ms
最近两因子 4ms