计算最大可用行数和列数以填充N个项目

时间:2013-10-21 11:19:49

标签: javascript factorization

通过查看thisthis,我想出了一个函数,它可能比它应该更复杂,但是,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。

我需要在显示器上进行实时相机进纸架分配,但我完全迷失了。我能想到的唯一方法是建立一个额外的功能,用以前生成的数字进行反馈并再次划分,但这似乎是错误的。

解决此问题的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:1)

正方形:

function squareNeeded(num) {
    return Math.ceil(Math.sqrt(num));
}

http://jsfiddle.net/aKNVq/

(我认为你的意思是整数的最小平方大于给定的数量,因为如果你的意思是一个矩形,那么七个例子就是2 * 4而不是3 * 3.)