有人能想出解决这个问题的方法或代码实现吗谢谢!
这不是家庭作业。
给定一个整数,写一个函数foo(int area),这个函数应该返回一个矩形,这个矩形在两边a和b的差值最小,而且a*b必须大于area小于或等于(area+2)。

最佳答案

好的,如果你没有大面积(如果是“int”,那么是),那么用O(qRT(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))。即使是长型的也够了。如果你想找到解决办法然后需要使用更复杂的算法:
使用快速因子分解法得到所有素因子的数组。
用动态规划法求解标准任务两部分的concat数组,因此所有部分的总乘积应尽可能接近。

关于java - 输入一个整数,输出一个侧面为a和b的矩形,其差应最小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12471602/

10-15 06:28