IPB
ЛогинПароль:

> числа, дающие в сумме заданное число
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Необходимо найти все такие n1, ..., n10, что n1 + ... + n10 = 100.
Можно перебирать вообще все возможные комбинации n1, ..., n10 и проверять на равенство 100, но наверняка есть способ решить задачу быстрее, только какой?
Если есть готовый код (на любом, наверное, языке) - с удовольствием гляну smile.gif


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Я бы попробовал напрячь рекурсию, то есть, не перебирать все возможные значения в поисках сумм, а пойти в обратном направлении: раскладывать сумму на все возможные значения...
procedure Test is
type arr is array(Positive range <>) of Integer;
max_parts: constant Integer := 5;

procedure divide(s: in Integer; vals: in out arr;
n_parts: in Integer) is
ok: Boolean;
begin
if n_parts = 1 then
ok := True;
-- Так отсекаем дубликаты
for i in 2 .. max_parts - 1 loop
ok := ok and (vals(i - 1) <= vals(i));
end loop;

if ok then
for i in 1 .. max_parts - 1 loop
Put(Integer'Image(vals(i)) & "+");
end loop;
Put_Line(Integer'Image(s));
end if;
else
for i in 1 .. s - 1 loop
vals(max_parts - n_parts + 1) := i;
divide(s - i, vals, n_parts - 1);
end loop;
end if;
end;

v: arr(1 .. max_parts);
begin
New_Line;
divide(12, v, max_parts); -- Ищем все разложения числа 12 на 5 чисел
end Test;
Вроде, работает... Это все при условии, что нет дополнительных ограничений, на использование одинаковых чисел, еще чего-нибудь...

P.S. Sorry за язык, но за Паскалем надо идти в соседнее здание, а так неохота... smile.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 7:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name