const nn=100; { предельное количество номиналов банкнот }type bnk=longint;var nom,res:array[1..nn] of bnk; i,n,koln:integer; sum:bnk;procedure Sort(n:integer);var i,j:integer; t:bnk;begin for i := 1 to n-1 do for j := 1 to n-i do if nom[j] > nom[j+1] then begin t := nom[j]; nom[j] := nom[j+1]; nom[j+1] := t endend;begin Readln(n); for i:=1 to n do Read(nom[i]); Readln(sum); Sort(n); koln:=0; i:=n; while sum>0 do begin while nom[i]>sum do Dec(i); Inc(koln); res[koln]:=nom[i]; sum:=sum mod nom[i]; if (sum<nom[1]) and (sum<>0) then begin sum:=0; koln:=-1 end end; if koln=0 then koln:=-1; Writeln(koln); for i:=1 to koln do Write(res[i],' '); Writelnend.
Тестовые решенияКонтрольный пример:51 3 7 12 3240332 7 1
Еще один пример:81 5 10 50 100 500 1000 5000458661000 500 50 10 5 1