javascript - 针对给定纵横比用 n 个元素填充网格的算法

标签 javascript algorithm

我需要找到由 n 个元素填充的网格的尺寸,给定纵横比。网格不必填满。

例如,如果 n=8 并且纵横比为 1:1,我应该得到一个 3 x 3 的网格。如果其中有 8 个元素,我将留下一个空单元格:

***
***
**

如果 n=13 并且纵横比为 1:2,我会得到一个 6 x 3 的网格:

******
******
*

我很确定对于任何 n 和任何比率都存在一种计算方法,但我在网上找不到任何东西(可能是因为我不知道这类问题的关键字) .

注意:这是我用 Javascript 制作的可视化,但我不需要 JS 代码,只需要一个算法。

最佳答案

第 1 步 - 求乘数:

如果纵横比为 3:4,则 a=3b=4n = elements
multi = math.ceil( SQRT(n/(a*b)) )
第 2 步 - 查找维度:
dim1 = a * multi;
dim2 = b * multi;

示例。

n = 59。a = 2,b = 3。

 multi = math.ceil  (SQRT (59 / (2*3))) = math.ceil(  sqrt(9.833)  ) = 4
 dim1 = 2*4 = 8; 
 dim2 = 3*4 = 12;

8*12 = 96(所以 59 适合它)。以前是 54 (6x9) - 它太小了。

示例 2.
n = 24。a = 1,b = 2。

 multi = math.ceil  (SQRT (24 / (1*2))) = math.ceil(  sqrt(12)  ) = 4
 dim1 = 1*4 = 4; 
 dim2 = 2*4 = 8;

4*8 = 32(所以 24 适合它)。

示例 3(完全完整)。
n = 27。a = 1,b = 3。

 multi = math.ceil  (SQRT (27 / (1*3))) = math.ceil(  sqrt(9)  ) = 3
 dim1 = 1*3 = 3; 
 dim2 = 3*3 = 9;

3*9 = 27(所以 27(边界值)适合它)。

关于javascript - 针对给定纵横比用 n 个元素填充网格的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38997860/

相关文章:

javascript - 覆盖 JavaScript 中的函数

javascript - isPresent 和 isDisplayed 方法有什么区别

sql-server - 从 sql 查询制作 json

algorithm - 计算 N 面骰子每个面在 M 次掷骰中出现的次数的最快方法

algorithm - 在有向图中寻找哈密尔顿路径的随机算法

javascript - jQuery .click() .show() 函数问题

javascript - 复制点击事件,销毁它们并稍后附加它们

javascript - Socket.io 和 Async 不返回值

javascript - 为什么这个嵌入函数不起作用(在 javascript 算法内部),从而阻止 javascript 算法被解决?

java - Java 中的双向冒泡排序?