|
|
|
Abbath1349 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 214 Регистрация: 16.6.2010 Репутация: нет Всего: нет |
у меня есть массив из чисел например {1,4,67,8,9,4,7,8,4,7,3,5} и число например 20 как мне найти все варианты чисел < 20 которые можно получить при складывании?
что то вроде: 1+4+5+7=17 8+7+3=18 .... |
|||
|
||||
esperanto |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
Можно получить все числа меньшие 20, так как у вас есть 1
1 2=1+1 3=1+1+1 .... --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
Abbath1349 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 214 Регистрация: 16.6.2010 Репутация: нет Всего: нет |
Я имел ввиду при складывании определенной части цифр из данного массива |
|||
|
||||
Lipetsk |
|
|||
в форме ;) Профиль Группа: Участник Сообщений: 180 Регистрация: 28.1.2009 Где: Липецк Репутация: 2 Всего: 5 |
полным перебором 2^n вариантов
хотя такой перебор легко оптимизировать |
|||
|
||||
esperanto |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
1 это и есть определеная часть элементов из массива --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
||||
|
|||||
Abbath1349 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 214 Регистрация: 16.6.2010 Репутация: нет Всего: нет |
а по подробнее можно? |
|||
|
||||
sQu1rr |
|
|||
Опытный Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: нет Всего: 13 |
||||
|
||||
sQu1rr |
|
|||
Опытный Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: нет Всего: 13 |
Если не повторяются, то вот базовый вариант
С++, но помоему смысл понятен. Если объем выборки больше (ну и разумеется лимит), ну, всмысле намного больше, ооочень намного, то приедтся оптимизировать, а так сойдет |
|||
|
||||
comp |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 61 Регистрация: 15.11.2006 Репутация: 1 Всего: 1 |
Предлагаю упрощенную реализацию
Всё зависит очень сильно от размера массива, но для массивов меньших 20 будет работать отлично. Весь массив можно представить в виде двоичного числа, а отдельную ячейку в виде отдельного бита. Если этот бит равен 0 -- то число не учитывается, если 1 -- то учитывается. Тогда вся задача сводится к проходу в цикле от 1 до 2^n, где n -- размер массива. ну и код получается следующий
|
|||
|
||||
миг |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
но лучше отсортировать числа в порядке возрастания или хотя бы выкинуть из массива все числа, которые уже больше или равны 20. тогда перебирать придется меньше. --------------------
Oaks may fall when reeds stand the storm. |
||||
|
|||||
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |