输入一个整数,输出一个有a和b边的矩形,差值应该是最小的

时间:2012-09-18 06:38:55

标签: java algorithm

有人可以对此问题有想法或代码实现吗?非常感谢! 这不是家庭作业。

给定一个整数,写一个函数foo(int area),这个函数应该返回一个矩形,这个矩形在两边a和b的差异最小,而且a * b必须大于面积且小于或者等于(区域+2)。

1 个答案:

答案 0 :(得分:1)

好的,如果你没有大区域(如果键入“int”,那么是),复杂度为O(sqrt(n))的解决方案就足够了。然后你可以使用愚蠢的解决方案。

#include "math.h"

void foo(int area)
{
    long a = (long)sqrt(area + 2);
    while ((area + 1)  % a != 0 && (area + 2) % a != 0) a--;
    long total_area = ((area + 1) % a == 0) ? (area + 1) : (area + 2);
    long b = total_area / a;
    printf("%ld = %ld X %ld", total_area, a, b);
}

此任务的复杂性为O(N ^(1/2))。即使是长型也足够了。如果你要找很长时间的解决方案。然后你需要使用更复杂的算法:

  1. 使用快速因子分解法获取所有主要除数的数组。
  2. 使用动态编程解决标准任务。 Concat阵列分为两部分,因此所有部件的总产品应尽可能接近。