Исходя из вашего последнего комментария, я предполагаю, что вы хотите разбить прямоугольник на n под прямоугольников одинакового размера, и чтобы они были выровнены таким образом, чтобы количество строк и количество столбцовравны (последний ряд, возможно, не полностью заполнен).Если это так, вы можете использовать ceil(sqrt(n))
для вычисления количества столбцов (поскольку, как вы, вероятно, догадались, это наименьшее количество столбцов, необходимое для того, чтобы не было больше строк, чем столбцов).Тогда количество строк, необходимое для размещения n элементов, распределенных по столбцам numColumns , будет определено как ceil(n / (double)numColumns)
.
Что касается кода, который вы показали: причина, по которой это не работает (как вы, вероятно, обнаружили сами), в том, что floor(sqrt(n)) * ceil(sqrt(n))
может быть меньше, чем n ;например, это относится к n = 7 .Предлагаемый мною расчет является более безопасным способом (косвенно) выяснить, должно ли число строк быть ceil(sqrt(n))
или floor(sqrt(n))
.