Тема по информатике: Особенности информационного обучения представителей различных социальных групп. Предоставления информационных услуг населению составить анкету -о по теме
Будем рассуждать так: пусть сумма, которую надо разменять, равна некоторому числу amount. Дадим сначала максимальное количество пятерок (но так, чтобы общая сумма пятерок не превосходила суммы, которую надо разменять). Если нам удалось таким образом разменять всю сумму - победа! - иначе до общей суммы не хватит 1, 2, 3 или 4 рубля.
Самый простой случай из оставшихся - если осталось отдать 3 рубля. В таком случае выдаём оставшуюся трёшку и радуемся выполненной задаче.
Иначе придется изменять количество выданных пятерок - при "жадном" выборе решения не получилось. - Попробуем убрать одну пятерку. Если оставалось выдать 1 рубль или 4 рубля - теперь нужно выдать 5+1=6 рублей или 5+4=9 рублей соответственно, но это можно сделать только трёшками. - Попробуем убрать две пятерки. Если оставалось выдать 2 рубля, то теперь надо выдать 12 рублей, что опять-таки можно сделать трёшками.
Резюмируем. Если amount делится на 5, то надо выдать (amount//5) пятерок и 0 трёшек. Если amount дает остаток 1 при делении на 5, то надо выдать (amount//5 - 1) пятерок и 2 трёшки. Если amount дает остаток 2 при делении на 5, то надо выдать (amount//5 - 2) пятерок и 4 трёшки. Если amount дает остаток 3 при делении на 5, то надо выдать (amount//5) пятерок и 1 трёшку. Если amount дает остаток 4 при делении на 5, то надо выдать (amount//5 - 1) пятерок и 3 трёшки.
Такой алгоритм позволяет дать размен минимальным количеством монет.
Для небольшого удобства в программе этот выбор записан немного по-другому. Код во вложении.
1) В цикле Repeat Until идет проверка, что число введено в диапазоне [0..200} var i,n:integer; a:longint; p:real; begin p:=1; Repeat readln(n); Until (n>=0)and(n<=200); for i:=1 to n do begin readln(a); p:=p*a; end; writeln(p); end.
2) var i,n:integer; a,max:longint; begin Repeat readln(n); Until (n>=0)and(n<=200); for i:=1 to n do begin readln(a); if a>max then max:=a; end; writeln(max); end. 3) var i,n:integer; a,min:longint; begin Repeat readln(n); Until (n>=0)and(n<=200); for i:=1 to n do begin readln(a); if a<min then min:=a; end; writeln(min); end.
Самый простой случай из оставшихся - если осталось отдать 3 рубля. В таком случае выдаём оставшуюся трёшку и радуемся выполненной задаче.
Иначе придется изменять количество выданных пятерок - при "жадном" выборе решения не получилось.
- Попробуем убрать одну пятерку. Если оставалось выдать 1 рубль или 4 рубля - теперь нужно выдать 5+1=6 рублей или 5+4=9 рублей соответственно, но это можно сделать только трёшками.
- Попробуем убрать две пятерки. Если оставалось выдать 2 рубля, то теперь надо выдать 12 рублей, что опять-таки можно сделать трёшками.
Резюмируем.
Если amount делится на 5, то надо выдать (amount//5) пятерок и 0 трёшек.
Если amount дает остаток 1 при делении на 5, то надо выдать (amount//5 - 1) пятерок и 2 трёшки.
Если amount дает остаток 2 при делении на 5, то надо выдать (amount//5 - 2) пятерок и 4 трёшки.
Если amount дает остаток 3 при делении на 5, то надо выдать (amount//5) пятерок и 1 трёшку.
Если amount дает остаток 4 при делении на 5, то надо выдать (amount//5 - 1) пятерок и 3 трёшки.
Такой алгоритм позволяет дать размен минимальным количеством монет.
Для небольшого удобства в программе этот выбор записан немного по-другому. Код во вложении.
var
i,n:integer;
a:longint;
p:real;
begin
p:=1;
Repeat
readln(n);
Until (n>=0)and(n<=200);
for i:=1 to n do
begin
readln(a);
p:=p*a;
end;
writeln(p);
end.
2)
var
i,n:integer;
a,max:longint;
begin
Repeat
readln(n);
Until (n>=0)and(n<=200);
for i:=1 to n do
begin
readln(a);
if a>max then
max:=a;
end;
writeln(max);
end.
3)
var
i,n:integer;
a,min:longint;
begin
Repeat
readln(n);
Until (n>=0)and(n<=200);
for i:=1 to n do
begin
readln(a);
if a<min then
min:=a;
end;
writeln(min);
end.