Определить максимально возможное количество пирожков, которые Петя может купить - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Петя очень любит пирожки с различной начинкой, причем не так важно с какой именно. Однажды, пребывая в голодном состоянии, Петя зашел в буфет и увидел, что в продаже присутствуют пирожки с картошкой, капустой и рисом. Петя желает купить как можно больше пирожков, но проблема в том, что количество пирожков в продаже ограничено так же, как и количество денег у Пети. Помогите Пете определить максимально возможное количество пирожков, которые он может купить. Входные данные Первая строка входного файла INPUT.TXT содержит числа P1, P2 и P3 – стоимость пирожков с картошкой, капустой и рисом соответственно. Во второй строке определены значения N1, N2 и N3 – количество соответствующих пирожков в продаже. В третьей строке записано число R – количество денег у Пети. Все числа во входных данных целые неотрицательные, не превосходящие 1018. Примеры 5 3 8 2 6 4 23 ответ 7 мой вариант но не работает:

Решение задачи: «Определить максимально возможное количество пирожков, которые Петя может купить»

textual
Листинг программы
program pirojki;
 
const
  nacinka = 3;
 
var
  stoimost: array [1 .. nacinka] of integer = (
    5,
    3,
    8
  );
  kolicestvo: array [1 .. nacinka] of integer = (
    2,
    6,
    4
  );
  dengi: integer = 23;
  kupil: integer = 0;
  denegDostatocno: Boolean = true;
  i, samieDesovieIndex, samieDesovieCena: integer;
 
begin
  while denegDostatocno do
  begin
    samieDesovieCena := 10000;
    for i := Low(stoimost) to High(stoimost) do
    begin
      if (samieDesovieCena > stoimost[i]) and (kolicestvo[i] > 0) then
      begin
        samieDesovieCena := stoimost[i];
        samieDesovieIndex := i;
      end;
    end;
    while (kolicestvo[samieDesovieIndex] > 0) and denegDostatocno do
    begin
      while (dengi - stoimost[samieDesovieIndex] >= 0) and
        (kolicestvo[samieDesovieIndex] > 0) do
      begin
        dec(dengi, stoimost[samieDesovieIndex]);
        dec(kolicestvo[samieDesovieIndex]);
        inc(kupil);
      end;
      if kolicestvo[samieDesovieIndex] > 0 then
        denegDostatocno := false;
    end;
  end;
  writeln('Петя купил ', kupil, ' пирожков');
  Readln;
 
end.

Объяснение кода листинга программы

  1. В программе объявлены три константы: nacinka (количество видов пирожков), 5, 3, 8 (стоимость каждого вида пирожков в копейках).
  2. Переменные объявлены следующим образом:
    • stoimost: массив из 3 элементов (5, 3, 8), представляющих стоимость каждого вида пирожков в копейках.
    • kolicestvo: массив из 3 элементов (2, 6, 4), представляющих количество каждого вида пирожков.
    • dengi: переменная, равная 23 (количество денег у Пети).
    • kupil: переменная, которая будет хранить количество купленных пирожков.
    • denegDostatocno: логическая переменная, указывающая, достаточно ли денег у Пети для покупки пирожков.
    • i, samieDesovieIndex, samieDesovieCena: переменные, используемые в цикле.
  3. В цикле while происходит покупка пирожков.
    • samieDesovieCena устанавливается равной стоимости самого дешевого пирожка.
    • samieDesovieIndex устанавливается равным индексу этого пирожка в массиве stoimost.
    • Если стоимость пирожка меньше денег у Пети и количество этого пирожка больше 0, то происходит покупка этого пирожка, уменьшается количество денег у Пети, количество пирожков увеличивается на 1, а переменная denegDostatocno устанавливается в false.
    • После покупки пирожка, если в массиве kolicestvo еще есть пирожки с положительным значением, то цикл while продолжается до тех пор, пока все пирожки не будут куплены.
  4. После завершения цикла выводится сообщение о количестве купленных пирожков.
    • Если denegDostatocno равно true, то выводится сообщение Петя купил X пирожков, где X - значение переменной kupil.
    • Если denegDostatocno равно false, то выводится сообщение У Пети недостаточно денег для покупки пирожков.

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы