Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разложение натурального числа на возможные суммы 
:(
    Опции темы
RobinHack
Дата 27.1.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.1.2009

Репутация: нет
Всего: нет



Есть ли готовый агоритм, при помощи которого можно разложить число n на всевозможные суммы его состовляющие. Скажем есть число 6. Алгоритм должен вернуть множество вида {1+1+1+1+1+1, 1+2+3, 2+2+2, 4+2, 1 + 4 + 1, 5 + 1, .......}. Причем без повторений, т.е без элементы 4+2 и 2+4 это одно и тоже. Спасибо.

Это сообщение отредактировал(а) RobinHack - 27.1.2009, 16:28
PM MAIL   Вверх
Akina
Дата 27.1.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Да, есть... обычный рекурсивный подбор.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
esperanto
Дата 28.1.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



да есть - динаммическое программирование
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
RobinHack
Дата 28.1.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.1.2009

Репутация: нет
Всего: нет



Цитата(esperanto @ 28.1.2009,  11:56)
да есть - динаммическое программирование

Чем я сейчас и занимаюсь.  smile Спасибо. Выложу код для будущих поколений, как только завершу.
PM MAIL   Вверх
maxdiver
Дата 28.1.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Странно. Задача ведь не в нахождении количества, а в нахождении самих разбиений. Динамическое программирование в этом плане ничуть не лучше перебора. 
PM MAIL WWW ICQ   Вверх
Akina
Дата 31.1.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Я бы даже сказал, что перебор лучше - накладнЫе расходы меньше.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
esperanto
Дата 1.2.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(maxdiver @ 28.1.2009,  18:29)
Странно. Задача ведь не в нахождении количества, а в нахождении самих разбиений. Динамическое программирование в этом плане ничуть не лучше перебора.

голословное заключение.



--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Silent
Дата 12.2.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



Как-то так
Код

const int nmax=100;
int a[nmax];

void f(int x, int level)
{
    if (x=0) 
    {
        for (int i=0;i<level;i++) cout << a[i] << "/t";
        cout << "\n";
    }
    else
    {
        for (int i=x;i>0;i--)
        {
            a[level] = i;
            f(x-i,level+1);
        };
    }
}

int main()
{
    int n = 0;
    cin >> n;
    f(n,0);
}

PM MAIL   Вверх
Rimch
Дата 18.2.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 23.6.2007

Репутация: 1
Всего: 3



Представление числа в виде суммы чисел - классическая задача теории алгоритмов.
Пример разложения числа 7
7= 1+1+1+1+1+1+1
7= 2+1+1+1+1+1
7= 2+2+1+1+1
7= 2+2+2 +1

7= 3+1+1+1+1
7= 3+2+1+1
7= 3+2+2
7= 3+3+1

7= 4+1+1+1
7= 4+2+1
7= 4+3

7= 5+1+1
7= 5+2

7= 6+1
7= 7
Идея решения 
Пусть дано число N которое надо разложить
1. Заполняем массив А(массив суммируемых чисел) из N элементов единичками
2. Начиная с последнего элемента ищем позицию элемента который надо увеличить на +1,
    удовлетворяющего условию A[pos-1]>A[pos], pos>1
3. Увеличиваем элемент на позиции pos на 1, остальные заполняем необходимым количеством 1
4. Повторяем шаги 2 и 3 пока первый элемент массива не станет равным N


PM MAIL ICQ   Вверх
SoWa
Дата 19.2.2009, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Вооот, пришел человек с мозгом, не загруженым большущими знаниями и высказал простейшее и нормальное решение smile За что ему плюсъ. (А мы как студенты. решающие задачу 1 класса с помощью интегралов)
А так, соглашусь с Akina и maxdiver


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1277 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.