有人可以对此问题有想法或代码实现吗?非常感谢! 这不是家庭作业。
给定一个整数,写一个函数foo(int area),这个函数应该返回一个矩形,这个矩形在两边a和b的差异最小,而且a * b必须大于面积且小于或者等于(区域+2)。
答案 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))。即使是长型也足够了。如果你要找很长时间的解决方案。然后你需要使用更复杂的算法: