Определить вариант покупки, чтобы деньги были истрачены полностью, а количество предметов было наибольшим - Free Pascal
Формулировка задачи:
Определить вариант покупки,чтобы деньги были истрачены полностью,а количество предметов было наибольшим:
Ученику поручено купить на данную сумму как можно больше линеек и карандашей: простых и цветных. Известно,что линейка стоит А р., а карандаши - цветной и простой соответственно В р., и С р.,
Решение задачи: «Определить вариант покупки, чтобы деньги были истрачены полностью, а количество предметов было наибольшим»
textual
Листинг программы
var s:integer;
a,b,c,
i,j,k:integer;
s1,s2,s3,tmp:string;
f:boolean;
begin
write('линейки, карандаши цветные, простые: ');readln(a,b,c);
write('сумма = ');readln(s);
s1:=' лиинейки: ';s2:=' карандаши цветные: ';s3:=' карандаши простые: ';
if a<b then begin a:=a+b;b:=a-b;a:=a-b;tmp:=s1;s1:=s2;s2:=tmp end;
if b<c then begin b:=b+c;c:=b-c;b:=b-c;tmp:=s2;s2:=s3;s3:=tmp end;
if a<b then begin a:=a+b;b:=a-b;a:=a-b;tmp:=s1;s1:=s2;s2:=tmp end;
k:=0;f:=true;
while f and(k<=s) do
begin
j:=0;
while f and(j<=s) do
begin
i:=0;
while f and(i<=s) do
begin
if i*c+j*b+k*a=s
then begin f:=false; writeln(s3,i,s2,j,s1,k) end;
inc(i)
end;
inc(j)
end;
inc(k)
end;
if f then writeln('вариант покупки,чтобы деньги были истрачены полностью не возможен')
end.
Объяснение кода листинга программы
- Ввод начальных данных:
- Переменные a, b, c получают значения количества предметов каждого вида, введенных пользователем.
- Переменная s получает значение суммы денег, которую пользователь готов потратить.
- Переменные s1, s2, s3 получают строковые значения для удобства вывода информации на экран.
- Переменная f устанавливается в true, чтобы запустить цикл поиска варианта покупки.
- Поиск варианта покупки:
- Цикл while запускается до тех пор, пока f и значение переменной k не превышают значение переменной s.
- Внутри цикла while находится еще один цикл while, который итерируется до тех пор, пока f и значение переменной j не превышают значение переменной s.
- Внутри второго цикла while находится еще один цикл while, который итерируется до тех пор, пока f и значение переменной i не превышают значение переменной s.
- Внутри третьего цикла while проверяется, равен ли текущий суммарный счет ic + jb + k*a значению переменной s.
- Если условие выполняется, то f устанавливается в false, чтобы выйти из всех циклов, и выводится информация о найденном варианте покупки.
- Если условие не выполняется, то значение переменной i увеличивается на 1.
- Вывод сообщения:
- Если цикл поиска варианта покупки не дал результатов, то выводится сообщение о том, что вариант покупки, чтобы деньги были истрачены полностью, не возможен.