Надо методом перебора. Я сделал, только они повторяются: 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]-1 do 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:=1 to q do S:=S+a[i]; Suma:=(S>=N); end; procedure Print; var i:integer; begin for i:=1 to q do write(a[i],' '); writeln; end; begin CLrSCr; readln(n,q); for i:=1 to q do a[i]:=i; repeat flag:=false; //флаг ставим на 0 while not Suma do begin a[i]:=a[i]+1; flag:=true; // флаг 1 end; if flag=false then dec(i) else Print; if Ok then begin if flag=false then begin dec(i); a[i]:=a[i]+1; repeat inc(i); a[i]:=a[i-1]+1; until i=q end else begin 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.