Надо методом перебора. Я сделал, только они повторяются: 1 3 5 - 5 3 1 Может у вас есть алгоритм для этой задачи? Я думал сохранить результаты в массиве, т.е если числа вектора не повторяются с теми что из массива то добавляем в массив, но это не эфективно, думаю есть более простой метод. Спасибо.
Спасибо, volvo, только что закончил, вот без рекурсии только пока работает только с макс. с K=3
KOD(Показать/Скрыть)
Uses Crt;
var n,q,i:integer; a:array[1..3] of integer; flag:boolean;
function Ok:boolean; //смотрим если можем продолжать добовлять
var i,S:integer;
begin
S:=0;
for i:=a[1] to q+a[1]-1do
S:=S+i;
if S<n then Ok:=True
else ok:=False;
end;
function Suma:boolean;
var i,S:integer;
begin
S:=0;
for i:=1to q do
S:=S+a[i];
Suma:=(S>=N);
end;
procedure Print;
var i:integer;
beginfor i:=1to q do
write(a[i],' ');
writeln;
end;
begin CLrSCr;
readln(n,q);
for i:=1to q do
a[i]:=i;
repeat
flag:=false; //флаг ставим на 0
whilenot Suma dobegin
a[i]:=a[i]+1;
flag:=true; // флаг 1
end;
if flag=false then dec(i)
else Print;
if Ok thenbeginif flag=false thenbegin
dec(i);
a[i]:=a[i]+1;
repeat
inc(i);
a[i]:=a[i-1]+1;
until i=q endelsebegin
dec(i);
a[i]:=a[i]+1;
inc(i);
a[i]:=a[i-1]+1;
end;
if (OK=False) and (Suma) then Print;
end;
until OK=False;
Readln;
end.