确定给定数字所需的行/列

Mik*_*ner 12 c# algorithm math silverlight

我在运行时确定了许多控件(在这种情况下为图表).我想将它们放在具有适当行数和列数的网格中.例如,

  • 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(不确定最好的方法)

如果有人能指出我正确的方向,我会很感激 - 如果我离开基地的话,我会建议一个不同的算法.

jv4*_*v42 26

想法:如果平方根不是整数,那么将它放在一边,然后将整数除以此值.

int columns = (int)sqrt(number);
int lines = (int)ceil(number / (float)columns);
Run Code Online (Sandbox Code Playgroud)

示例:21 => columns = 4,lines = 6.

更新:奖金,它也适用于sqrt(数字)是整数.任何地方都不会发生舍入,并且值是正确的.