Надо методом перебора. Я сделал, только они повторяются: 1 3 5 - 5 3 1 Может у вас есть алгоритм для этой задачи? Я думал сохранить результаты в массиве, т.е если числа вектора не повторяются с теми что из массива то добавляем в массив, но это не эфективно, думаю есть более простой метод. Спасибо.
volvo, а почему ты счел возможным совершенно проигнорировать мой пост (Разбиение числа на слагаемые) и даже не извиниться?.. Мне кажется, это не принято.
По данной мной ссылке содержится решение, которое требует минимальных изменений (сделать вывод только в случае нужного числа слагаемых).
-1
Добавлено через 7 мин.
Цитата(volvo @ 18.04.2011 16:26)
Алгоритм ты озвучил сам: перебор.
Перебор - это класс алгоритмов, а не алгоритм.
Вот мое модифицированное решение:
const
m=1000;
var
a: array[1..m]of integer;
k,n,q: integer;
procedure Split(j,n: integer);
var
i: integer;
beginif (n=0)and(k=q) thenbeginfor i:=1to k do Write(a[i]:4);
WriteLn
endelsefor i:=j to n dobegin
Inc(k);
a[k]:=i;
Split(i+1,n-i);
Dec(k)
endend;
begin
Write('n = ');
ReadLn(n);
Write('q = ');
ReadLn(q);
k:=0;
Split(1,n);
ReadLn
end.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой