Определить вариант покупки, чтобы деньги были истрачены полностью, а количество предметов было наибольшим - 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.
- Вывод сообщения:
- Если цикл поиска варианта покупки не дал результатов, то выводится сообщение о том, что вариант покупки, чтобы деньги были истрачены полностью, не возможен.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д