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


Автор: Rhc 30.12.2013, 18:45
Всем привет! Помогите оформить или подсказать код к вот такой задаче:

1. Вводится число, означающее количество элементов массива. 
2. Разделить элементы массива на 2 группы так, что бы разность между ними была минимальна. 
Например, вводим:
3
1 3 5
Получаем: 
1
Или ещё
4
1 1 1 1 
Получаем:
0

Как я решил эту задачу: 
(Допустим, входные данные были:
3
1 3 5) 
1. Ищем сумму и делим на два (1+3+5)/2=4,5.
2. Нужен массив, длина которого будет в 2 раза меньше, чем длина введённого. 
2.1. Если длина массива нечётная, то округлить длину массива в меньшую сторону.
3. "Засовываем" все возможные комбинации чисел в наш обрезанный массив и искать разность чисел с тем, что получилось в п. 1.
3.1. Разность брать по модулю, чтобы не было геморроя.
4. Наименьшая возможная разность и будет решением, но не будет ответом, так как ответом будет эта минимальная разность умноженная на два.

Как теперь всё это оформить в виде кода? 

Автор: de_Nis 31.12.2013, 18:35
Попробуем применить твой алгоритм к следующему набору цифр: 1, 3, 5, 9.
1.  Ищем сумму и делим на два: (1+3+5+9)/2=9
2. Нужен массив, длина которого будет в 2 раза меньше, чем длина введённого. Для нашего случая: 4/2=2, то есть массив из двух элементов.
Но ответ: массив из одного элемента 9 или из трех 1, 3, 5.
Видно, что предложенный тобой алгоритм не работает.

Поэтому до "Как теперь всё это оформить в виде кода? " нужно найти правильный алгоритм.
А это - вопрос в раздел "Форум -> Технологии и алгоритмы -> Алгоритмы" 
И только найдя алгоритм, стоит задавать вопрос о его реализации на конкретном языке программирования.

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