Необходимо разлить М литров жидкости в бутли ёмкостью a, b, c, и d литров - Turbo Pascal

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

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

помогите пожалуйста доделать программку... вот условие: Необходимо разлить М литров жидкости в бутли ёмкостью a, b, c, и d литров таким образом, чтобы все использованные бутли были полными, а их количество -минимальным. вот то что я решила
только не могу сделать так, что бы когда к примеру вводишь количество объёмов 10,15,16,17 а общее количество которое нужно разлить 4, то должно выводить что "нельзя", так на полную некуда залить, но я не знаю как это правильно сделать.... может кто-нить знает как это правильно сделать?

Решение задачи: «Необходимо разлить М литров жидкости в бутли ёмкостью a, b, c, и d литров»

textual
Листинг программы
program www;
uses CRT;
var i,a,b,c,d,x,x1,y,y1,z,z1,w,w1,min,n,m:integer;
label metka;
Begin
ClrScr;
repeat
 write('Vvedite 1 ob-em: ');readln(a);
 write('Vvedite 2 ob-em: ');readln(b);
 write('Vvedite 3 ob-em: ');readln(c);
 write('Vvedite 4 ob-em: ');readln(d);
 write('Vvedite obschii ob-em litrov: ');readln(m);
 write('Vvedite kol-vo rasmatriwaimjch variantow n=');
 readln(n);
 if (a+b+c+d)<m
 then goto metka
else
begin
randomize;
until (a>0)and(b>0)and(c>0)and(d>0)and(m>0)and
      (a<=m)and(b<=m)and(c<=m)and(d<=m);
    min:=10000;
 for i:=0 to n do
Begin
repeat
 x:=Random((m div a)+1); {kolichestwo butjlok }
 y:=Random((m div b)+1);
 z:=Random((m div c)+1);
 w:=Random((m div d)+1);
 until x*a+y*b+z*c+w*d=m;
    if x+y+z+w<min then
      Begin
        x1:=x;
        y1:=y;
        z1:=z;
        w1:=w;
        min:=x1+y1+z1+w1;
      end;
 
end;
writeln;
 
    writeln('Kol-vo bytilok ob-em a: ',x1);
 
    writeln('Kol-vo bytilok ob-em b: ',y1);
 
    writeln('Kol-vo bytilok ob-em c: ',z1);
 
    writeln('Kol-vo bytilok ob-em d: ',w1);
    writeln('min=',min);
end;
        metka:
writeln('нельзя');
 readln;
end.

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

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