Предмет: Информатика, автор: kookbak

Написать программу в Pascal. Старинная задача. Сколько можно купить быков, коров и телят, если плата за быка 5 рублей, за корову - 3 рубля, за теленка - полтинник (0,5 рубля), если на 100 рублей надо купить 100 голов скота. Плюс 1 балл, если алгоритм эффективный.


raf1O5: То есть дорогие животные в приоритете?
kookbak: Вот вопрос :Сколько можно купить быков, коров и телят?
kookbak: Поможете?
raf1O5: Не могу помочь вам с этим заданием.
kookbak: А почему?
raf1O5: Эффективный алгоритм не приходит на ум
kookbak: Тогда не эффективный пожалуста
kookbak: Пожалуйста
answer2020: Немного аналитики (совсем немного) и становится очевидно, что для данной задачи программный код вообще не нужен. Все решается простыми незамысловатыми формулами. :-)

Ответы

Автор ответа: raf1O5
2

program raf105;

const

s = 100;

var b,k,t: integer;

begin

writeln('Все возможные решения задачи:');

for b:=0 to (s div 5)+1 do

 for k:=0 to ((s - b*5) div 3)+1 do

 begin

   t := trunc( (s - b*5 - k*3) / 0.5 );

   if ((b+k+t) = 100) and ( (b*5+k*3+t*0.5)=s)

     then begin

       writeln;

       writeln('Быков: ',b);

       writeln('Коров: ',k);

       writeln('Телят: ',t);

     end;

 end;

end.

PascalABC 3.4.2


answer2020: Неужели никто ошибки в решении не увидел? Она же на поверхности!
answer2020: Даю подсказку: у данной задачи более чем одно решение.
raf1O5: Спасибо за подсказку. Моё решение не является одним из верных?
answer2020: Это как в квадратном уравнении с двумя корнями. Можно ли его считать решенным, если найден всего один корень?
answer2020: Если интересно могу предоставить уравнение для решения данной задачи.
raf1O5: Ваш вариант решения задачи на PascalABC или Алгоритмическом языке представляет больший интерес для меня и для автора вопроса.
answer2020: Математически задача описывается через систему уравнений 5i+3j+0,5k=100 и i+j+k=100. Умножим первое уравнение на два и вычтем из него второе. Получим следующее выражение: 9i+5j=100. Преобразовав это выражение, получим j=(100-9i)/5, j=20-9i/5. Это ключевая формула для решения данной задачи. i и j – целые положительные числа. j принимает целое значение только при i=0, i=5, b i=10. Другие, бОльшие чем 10 значения i, кратные 5, нам не подойдут, поскольку j в этом случае станет отрицательным.
answer2020: Программа будет заключаться организации цикла, в котором i изменяется от 0 до 10 с шагом 5. В теле цикла вычисляется значение j, равное 20-9*i/5 и к, равное 100—i-j. Вычисленные значения, здесь-же в цикле и печатаются.
raf1O5: program answer2020;
var
i: integer;
k,j: real;
begin
writeln('Все возможные решения задачи:');
writeln;
while i < 15 do
begin
j:= 20-9*i/5;
k:= 100-i-j;
writeln('Быков: ',i);
writeln('Коров: ',j);
writeln('Телят: ',k);
writeln;
i:= i+5;
end;
end.
answer2020: Красота! :-)
Похожие вопросы
Предмет: Алгебра, автор: alexander9216
Предмет: География, автор: руся169