Procedure P(Const A:integer; Var p:integer); Var K:real; d:integer; Begin if A > 1 then if (A = 2)or(A = 3) then p:=p+1 else if A mod 2 <> 0 then Begin K:=Sqrt(A); d:=3; While (d<K)and(A mod d <> 0) do d:=d+2; if A mod d <> 0 then Begin p:=p+1; Write('(простое)') End End; End; Const N = 20; Var A:array[1..N] of integer; i,k:integer; Begin Randomize; k:=0; Write('Исходный массив:'); For i:= 1 to N do Begin A[i]:=random(99)+1; Write(' ',A[i]); P(A[i],k); End; WriteLn; WriteLn('Кол-во простых чисел в массиве: ',k); 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 Размен невозможен
Это работа на компьютерах запусти прогрму нарисуй и найди фон