// PascalABC.NET 3.2, сборка 1417 от 28.03.2017 // Внимание! Если программа не работает, обновите версию!
begin var k:=Arr(1,2,5,10); // номиналы монет var m:=ReadArrInteger('Кол-во монет по '+k.JoinIntoString+' руб:',4); var n:=ReadInteger('Сумма в купюрах, руб:'); if m.Zip(k,(p,q)->p*q).Sum<n then begin // нехватка монет Writeln('Размен невозможен'); exit end; var s:=''; // для результатов for var i:=k.Length-1 downto 0 do if (n>=k[i]) and (m[i]>0) then begin // номинал участвует var t:=min(n div k[i],m[i]); // кол-во монет n:=n-k[i]*t; // остаток if s.Length>0 then s+=', '; s+=t+' по '+k[i]+' руб.'; end; if n<>0 then Writeln('Размен невозможен') else Writeln(s) end.
Примеры Кол-во монет по 1 2 5 10 руб: 350 215 86 130 Сумма в купюрах, руб: 1526 130 по 10 руб., 45 по 5 руб., 1 по 1 руб.
Кол-во монет по 1 2 5 10 руб: 500 146 0 38 Сумма в купюрах, руб: 432 38 по 10 руб., 26 по 2 руб.
Кол-во монет по 1 2 5 10 руб: 10 20 30 40 Сумма в купюрах, руб: 25000 Размен невозможен
var i,j,n:longint; f:boolean; begin writeln('Введите число'); readln(n); if n<2 then writeln('Простых делителей нет') else begin write('Число ',n,' ','= 1'); for i:=2 to n do if n mod i=0 then begin f:=true; j:=2; while f and(j<=round(sqrt(i/2)))do begin if i mod j=0 then f:=false else j:=j+1; end; if f then write('*',i); end; end; end.
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var k:=Arr(1,2,5,10); // номиналы монет
var m:=ReadArrInteger('Кол-во монет по '+k.JoinIntoString+' руб:',4);
var n:=ReadInteger('Сумма в купюрах, руб:');
if m.Zip(k,(p,q)->p*q).Sum<n then begin // нехватка монет
Writeln('Размен невозможен'); exit
end;
var s:=''; // для результатов
for var i:=k.Length-1 downto 0 do
if (n>=k[i]) and (m[i]>0) then begin // номинал участвует
var t:=min(n div k[i],m[i]); // кол-во монет
n:=n-k[i]*t; // остаток
if s.Length>0 then s+=', ';
s+=t+' по '+k[i]+' руб.';
end;
if n<>0 then Writeln('Размен невозможен')
else Writeln(s)
end.
Примеры
Кол-во монет по 1 2 5 10 руб: 350 215 86 130
Сумма в купюрах, руб: 1526
130 по 10 руб., 45 по 5 руб., 1 по 1 руб.
Кол-во монет по 1 2 5 10 руб: 500 146 0 38
Сумма в купюрах, руб: 432
38 по 10 руб., 26 по 2 руб.
Кол-во монет по 1 2 5 10 руб: 10 20 30 40
Сумма в купюрах, руб: 25000
Размен невозможен
var i,j,n:longint;
f:boolean;
begin
writeln('Введите число');
readln(n);
if n<2 then writeln('Простых делителей нет')
else
begin
write('Число ',n,' ','= 1');
for i:=2 to n do
if n mod i=0 then
begin
f:=true;
j:=2;
while f and(j<=round(sqrt(i/2)))do
begin
if i mod j=0 then f:=false
else j:=j+1;
end;
if f then write('*',i);
end;
end;
end.
Тестовое решение:
Введите число
2345
Число 2345 = 1*5*7*35*67