通过查看this和this,我想出了一个函数,它可能比它应该更复杂,但是,man,我的数学sux:
function tablize(elements)
{
var root = Math.floor(Math.sqrt(elements));
var factors = [];
for (var i = 1; i <= root; i++)
{
if (elements % i === 0)
{
factors.push([i, elements / i]);
}
}
var smallest = null;
for (var f = 0; f < factors.length; f++)
{
var factor = factors[f];
var current = Math.abs(factor[0] - factor[1]);
if (!smallest || factors[smallest] > factor)
{
smallest = f;
}
}
return factors[smallest];
}
虽然这确实有效,但它提供了我不满意的结果。
例如 - 7,它分为1x7,我希望它是3x3。这是填充7个元素所需的最小,最佳网格尺寸。
另外 - 3,它分为1x3,我希望它是2x2。
我需要在显示器上进行实时相机进纸架分配,但我完全迷失了。我能想到的唯一方法是建立一个额外的功能,用以前生成的数字进行反馈并再次划分,但这似乎是错误的。
解决此问题的最佳解决方案是什么?
答案 0 :(得分:1)
正方形:
function squareNeeded(num) {
return Math.ceil(Math.sqrt(num));
}
(我认为你的意思是整数的最小平方大于给定的数量,因为如果你的意思是一个矩形,那么七个例子就是2 * 4而不是3 * 3.)