我有许多在运行时确定的控件(在本例中为图表)。我想将它们放在具有适当数量的行和列的网格中。例如,

  • 4个= 2 x 2
  • 8项= 4 x 2
  • 9个= 3 x 3
  • 20项= 5 x 4
  • 11项= 4 x 3(我不在乎一个空单元格)

  • 抱歉,我没有任何代码可以显示我的尝试。我开始确定平方根是否为整数,该数字是否可以被2整除等,并开始意识到自己不确定如何解决这个问题。但这就是我的想法:
  • 如果平方根是整数,请使用平方根表示行数和列数(那里没有问题)
  • 如果不是,请确保数字为偶数(如果需要,添加一个-那里没有问题)
  • 查找产生该数字的最高两个整数。例如如果我有20个控件,则网格应该是5 x 4而不是10 x 2(不确定这样做的最佳方法)

  • 如果有人可以向我指出正确的方向,或者如果我的做法不正确,建议使用其他算法,我将不胜感激。

    最佳答案

    想法:如果平方根不是整数,则将其取底,然后将其除以该整数,将其取顶。

    int columns = (int)sqrt(number);
    int lines = (int)ceil(number / (float)columns);
    

    示例:21 =>列= 4,行= 6。

    更新:奖励,当sqrt(number)为整数时,它也适用。没有舍入发生任何地方,并且值是正确的。

    10-06 05:25
    查看更多