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

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

Петя очень любит пирожки с различной начинкой, причем не так важно с какой именно. Однажды, пребывая в голодном состоянии, Петя зашел в буфет и увидел, что в продаже присутствуют пирожки с картошкой, капустой и рисом. Петя желает купить как можно больше пирожков, но проблема в том, что количество пирожков в продаже ограничено так же, как и количество денег у Пети. Помогите Пете определить максимально возможное количество пирожков, которые он может купить. Входные данные Первая строка входного файла INPUT.TXT содержит числа P1, P2 и P3 – стоимость пирожков с картошкой, капустой и рисом соответственно. Во второй строке определены значения N1, N2 и N3 – количество соответствующих пирожков в продаже. В третьей строке записано число R – количество денег у Пети. Все числа во входных данных целые неотрицательные, не превосходящие 1018. Примеры 5 3 8 2 6 4 23 ответ 7 мой вариант но не работает:
program pirojki;
var p,p1,p2,p3,i:integer;
var n,n1,n2,n3:integer;
var st,kol,summ:integer;
var r:integer;
begin
kol:=0;
summ:=0;
st:=10;
writeln('Введите цены за пирожки');
readln(p1,p2,p3);
writeln('Введите количество пирожков');
readln(n1,n2,n3);
writeln('Введите количество денег у Пети');
readln(r);
  if(p1<p2)and(p1<p3) then;
    begin
      kol:=p1*n1;
        if r>=kol then
          begin
            summ:=r-kol;
            n:=n1;
            if (summ>=p2) and (summ<p3) then
               while (summ<p2)and(n2>=0) do
                 begin
                   summ:=summ-p2;
                   n:=n+1;
                   n2:=n2-1;
                 end
            else
               while (summ<p3)and(n3>=0) do
                 begin
                   summ:=summ-p3;
                   n:=n+1;
                   n3:=n3-1;
                 end;
          end
        else 
          begin
            while (r<p1)and(r>=0)and(n1>=0) do
              begin
                summ:=r-p1;
                n:=n+1;
                n1:=n1-1;
              end;
          end;
    end;
  if(p2<p1)and(p2<p3) then;
    begin
      kol:=p2*n2;
        if r>=kol then
          begin
            summ:=r-kol;
            n:=n2;
            if (summ>=p1) and (summ<p3) then
               while (summ<p1)and(n1>=0) do
                 begin
                   summ:=summ-p1;
                   n:=n+1;
                   n1:=n1-1;
                 end
            else
               while (summ<p3)and(n3>=0) do
                 begin
                   summ:=summ-p3;
                   n:=n+1;
                   n3:=n3-1;
                 end;
          end
        else
          begin
            while (r<p2)and(r>=0)and(n2>=0) do
              begin
                summ:=r-p2;
                n:=n+1;
                n2:=n2-1;
              end;
          end;
    end; 
  if(p3<p2)and(p3<p1) then;
    begin
      kol:=p3*n3;
        if r>=kol then
          begin
            summ:=r-kol;
            n:=n3;
            if (summ>=p2) and (summ<p1) then
               while (summ<p2)and(n2>=0) do
                 begin
                   summ:=summ-p2;
                   n:=n+1;
                   n2:=n2-1;
                 end
            else
               while (summ<p1)and(n1>=0) do
                 begin
                   summ:=summ-p1;
                   n:=n+1;
                   n1:=n1-1;
                 end;
          end
        else
          begin
            while (r<p3)and(r>=0)and(n3>=0) do
              begin
                summ:=r-p3;
                n:=n+1;
                n3:=n3-1;
              end;
          end;
    end;
writeln('Петя купил ',n,' пирожков');
end.

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

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.

5   голосов, оценка 4.200 из 5


СОХРАНИТЬ ССЫЛКУ