| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. Видно, что предложенный тобой алгоритм не работает. Поэтому до "Как теперь всё это оформить в виде кода? " нужно найти правильный алгоритм. А это - вопрос в раздел "Форум -> Технологии и алгоритмы -> Алгоритмы" И только найдя алгоритм, стоит задавать вопрос о его реализации на конкретном языке программирования. |