Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм сортировки в массив


Автор: ziga 30.7.2007, 13:22
Задача такая берётся число например 17 (оно может быть любым) для него надо создать 2хмерный массив, для числа 17 он должен быть таким:
 х х х х х
 х х х х х
 х х х х х
 х х 0 0 0

х - заполнено
0 - пусто

Сама задача заключается в том, что бы определить размер массива зная число, я собираюсь это делать так: взять две переменные x, y которые равны x=2, y=1
и циклом проверять если x * y < 17 то x = x + 1, y = y + 1
И так пока не будет выполнено условие, мне кажется, что это не самый лучший вариант может есть какие идеи получше?  

Автор: ivashkanet 30.7.2007, 14:46
[AttrDefID] А по какому принципу для 17 массив будет 4*5?
Судя по 
Цитата(ziga @  30.7.2007,  13:22 Найти цитируемый пост)
Сама задача заключается в том, что бы определить размер массива зная число, я собираюсь это делать так: взять две переменные x, y которые равны x=2, y=1

получаем правило: число строк на 1 меньше числа столбцов.
Тогда легко можно получить формулу:
X -- число строк, A -- входной параметр (17).
Задача, найти наименьшее X для которого выполняется
X * (X+1) > A
X^2 + X - A > 0
D = 1 + 4A
X_1,_2 = (-1 +-sqrt(D))/2
Неравенству удовлетворяют числа (-oo;X_1) или (X_2; +oo) (X_2  -- с плюсом)
Тогда искомое число будет наименьшее целое число не меньшее X_2: X_2 (когда X_2 целое) и [X_2] +1, когда нет.


Все вместе:
                            (-1 + sqrt(1+4A))/2, если это выражение целое
Число строк= 
                            [(-1 +sqrt(1 + 4A)/2] + 1, если нет.

Автор: ziga 30.7.2007, 18:22
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)