|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.09.2011, 01:51 | #1 |
Пользователь
Регистрация: 24.04.2011
Сообщений: 30
|
Разложение числа на слагаймые
На входе у нас число (нат, пол) которое нужно разложить и ожидаймое количество слагаймых
алгоритм решения таков..выделяем место для одномерного массива, заполняем его 1-ми увеличиваем последний елемент, пока сумма всех елементов не достигнет значения числа, которое мы разлогаем..выводим, уменшаем последний елемент на 1, при етом увеличивае предпоследний на 1 и т.д., но что бы выполнялись условия - следующий елемент (слагаймое) был не менше предущего и не больше остатка от разницы между суммой и предущим елементом. вывод тогда, когда остаток равный 0. Нужно сделать программу БЕЗ рекурсии, но что то не доходит до меня как правильно наложить условия, в данном виде прога определяет только два слагаймые, при большем количестве идет зацыкливантие, помогите плс) Код:
начал писать на паскале, но и сишное решение если есть, подойдет |
16.09.2011, 04:30 | #2 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 388
|
Немного подправил ваш алгоритм, буду базироваться на объявленных вами переменных:
- все слагаемые равны 1, arr[q] = n-q+1 - это у вас более менее делалось - p=q - номер уменьшаемого слагаемого 1. Пока выполняется условие arr[p]-1>=arr[p-1]+1. значение arr[p] уменьшаем на 1, а предшествующее слагаемое arr[p-1] увеличиваем. Это значит, что arr[p-1] в конечном итоге не станет больше чем половина начального значения arr[p] - чтобы не повторялись слагаемые в другой комбинации 2. уменьшаем p на 1 3. если p>1 переходим на п.1 Привожу основное тело программы, в функции Summ нет необходимости: Код:
на неконкретные вопросы даю неконкретные ответы ...
|
16.09.2011, 08:02 | #3 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Боюсь, недостаточно..
Вот пример работы программы: Код:
1 2 2 5 1 3 3 3 ... Честно говоря, я вот так с первого взгляда не скажу, как тут делать без рекурсии (и без повторов). Без наворотов не обойтись..
Предпочитаю на "ты".
Последний раз редактировалось TinMan; 16.09.2011 в 11:13. Причина: опечатка |
16.09.2011, 10:03 | #4 |
Пользователь
Регистрация: 24.04.2011
Сообщений: 30
|
в том и дело, что с рекурсией я сделал,нужно две версии, а ета не идет никак
|
16.09.2011, 10:58 | #5 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 388
|
Согласен, поспешил ... 1 2 3 5 = 11
на неконкретные вопросы даю неконкретные ответы ...
|
16.09.2011, 11:09 | #6 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
))) блин, с этими компьютерами совершенно считать разучился.. ))
+1
Предпочитаю на "ты".
|
16.09.2011, 23:53 | #7 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 388
|
Довольно интересная задачка, только изначально пошел не по тому пути ... если еще нужно:
Код:
на неконкретные вопросы даю неконкретные ответы ...
|
17.09.2011, 12:17 | #8 |
Пользователь
Регистрация: 24.04.2011
Сообщений: 30
|
Спасибо, работает
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разложение натурального числа с++ | Dashka13 | Помощь студентам | 6 | 20.05.2011 13:59 |
разложение натурального числа | DarkMage | Помощь студентам | 1 | 31.03.2011 17:38 |
Разложение числа на 3 слогаемых | azusdex | Общие вопросы C/C++ | 3 | 15.08.2010 00:31 |
Разложение числа на множители | spamer | Общие вопросы Delphi | 5 | 01.01.2009 12:32 |
Разложение числа на слагаемые | Oleg-vp | Общие вопросы Delphi | 5 | 30.10.2007 10:43 |