| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C/C++] Найти в массиве набор элементов! |
| Автор: Kiryousha 26.1.2009, 12:17 |
| Всем здравствуйте! Срочно необходима помощь в решении следующей задачи: из заданного массива целых чисел выбрать набор, сумма элементов которого будет наиболее близка к заданному числу. Вывести на экран найденные элементы и полученную сумму. Заранее спасибо! |
| Автор: Strell 26.1.2009, 13:33 | ||
| Можно реализовать с рекурсией, можно без. решай сам. Вот набросал пример с рекурсией. Ну а на следующий раз - в центр помощи!!!!
|
| Автор: Kiryousha 26.1.2009, 15:25 |
| Спасибо большое за оперативную помощь! Хулиганить больше не буду! P.S. Кстати, я девушка! |
| Автор: Kiryousha 26.1.2009, 18:07 |
| Ознакомилась с данным алгоритмом более подробно. Он не отрабатывает, к примеру, следующую ситуацию: есть массив, отсортированый по убыванию {11,7,5,3}. Ищу набор элементов, наиболее близкий к 19. Резульат получаю [11,7], хотя более правильным будет [11,5,3]. Есть предложение сделать так: в отсортированном по убыванию массиве, первый элемент поочерёдно сложить с последующими элементами массива. Получим новую последовательность. Для приведённого выше примера - {18,16,14}. Сравнивая с искомым числом каждый элемент, видим, что предел поиска ещё не достигнут, тогда к новой полученной последовательности начинаем прибавлять минимальное значение из последовательности, в нашем случае 3. Получаем {21,19,17}. Что и требовалось найти. В общем случае: Если бы на данном шаге мы получили значение разности между искомым числом и элементом массива большее, чем разность, найденную в предыдущей последовательности, то, как результат, взяли бы соответственно меньшее из них. Если бы на данном шаге не достигли наилучшего результата, то продолжали прибавлять минимальные элементы. Может не самый красивый алгоритм, но походит для любых последовательностей. Проблема в том, как его реализовать. |