Предмет: Информатика,
автор: kookbak
Написать программу в Pascal. Старинная задача. Сколько можно купить быков, коров и телят, если плата за быка 5 рублей, за корову - 3 рубля, за теленка - полтинник (0,5 рубля), если на 100 рублей надо купить 100 голов скота. Плюс 1 балл, если алгоритм эффективный.
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
Неужели никто ошибки в решении не увидел? Она же на поверхности!
Даю подсказку: у данной задачи более чем одно решение.
Спасибо за подсказку. Моё решение не является одним из верных?
Это как в квадратном уравнении с двумя корнями. Можно ли его считать решенным, если найден всего один корень?
Если интересно могу предоставить уравнение для решения данной задачи.
Ваш вариант решения задачи на PascalABC или Алгоритмическом языке представляет больший интерес для меня и для автора вопроса.
Математически задача описывается через систему уравнений 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 в этом случае станет отрицательным.
Программа будет заключаться организации цикла, в котором i изменяется от 0 до 10 с шагом 5. В теле цикла вычисляется значение j, равное 20-9*i/5 и к, равное 100—i-j. Вычисленные значения, здесь-же в цикле и печатаются.
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.
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.
Красота! :-)
Похожие вопросы
Предмет: Право,
автор: law1234
Предмет: Алгебра,
автор: LOPI1111
Предмет: Математика,
автор: tatanaulaeva
Предмет: География,
автор: руся169