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