


Помогите пожалуйста с решением задачи в Паскаль
Кондитерская фабрика города П, в котором живет Петя делает очень вкусные конфеты. Как-то раз, Петя собрался в гости к своему другу Васе, который живет в городе М. От города П до города М Петя решил доехать на поезде и взять с собой в подарок как можно больше коробок вкусных конфет.
Каждая коробка конфет имеет размеры a × b × c сантиметров, где a – длина, b – ширина и c – высота коробки. Для перевозки конфет Петя хочет использовать один большой ящик в форме прямоугольного параллелепипеда. В ящик должны быть уложены все коробки конфет. Для того чтобы не повредить их, все коробки в ящике должны сохранять исходную ориентацию и располагаться в одном направлении. Петя может использовать ящик любого размера, но по правилам железнодорожных перевозок размер ящика по сумме трех измерений не может превышать N сантиметров.
Требуется написать программу, которая по заданным числам N, a, b и с определяет такой размер ящика, который должен использовать Петя, чтобы в него поместилось максимальное количество коробок конфет.
Входные данные
Первая строка входного файла INPUT.TXT содержит разделенные пробелами четыре целых числа: N, a, b, с (1 ≤ N, a, b, c ≤ 109).
Выходные данные
Выходной файл OUTPUT.TXT должен содержать три числа – длину, ширину и высоту ящика, который должен выбрать Петя и в который поместится максимальное количество коробок конфет. Если подходящих ответов несколько, необходимо вывести любой.
Примеры
№INPUT.TXTOUTPUT.TXT
110 1 2 3 3 4 3
214 8 3 2 9 3 2
Пояснения к примерам
В первом примере выгоднее всего взять ящик размером 3 × 4 × 3 сантиметров, в который поместится три коробки конфет в длину, две коробки конфет в ширину и одна коробка конфет в высоту.
Во втором примере для того, чтобы разместить хотя бы две коробки конфет, нужен ящик размером хотя бы 8 × 3 × 4, у которого сумма измерений равна 15. В подходящий ящик поместится максимум одна коробка конфет. Подходящим также является ящик размером 9 × 3 × 2, хотя он и не является минимальным.
Добрый день.
Виктор Плясов говорит о реальности жизни, в его словах есть доля правды, но это не приближает к решению задачи. Тут не важно, на каком языке ее решить, тут важно разработать алгоритм. Уверен, что на олимпиаде приняли бы решение этой задачи в виде логической блок схемы. По крайне мере, засчитали бы, как частичное решение.
Ксения, чтобы разобраться, с какой стороны подойти к это задаче, предлагаю начать с упрощенного варианта - разместить одинаково ориентированно прямоугольники с заданными размерами сторон в большом прямоугольнике с целью расположить максимальное количество маленьких прямоугольников.
Имеем большой прямоугольник со сторонами А и В, причем А+В <= N, маленькие прямоугольники одинакового размера со сторонами а и b. При этом А и В - переменные величины; а, b, N = const.
Пусть 1 <= а, b, N <= 100.
При таких условиях В можно выразить как В=N-A (если нам необходимо разместить максимум прямоугольников, следует исходить из условия А+В=N).
Если мы разместим прямоугольники стороной а вдоль стороны А, то поместится k_A = (А div a) шт по одной стороне, и k_B=(В div b) по другой. div - целочисленное деление. Всего в большом прямоугольнике со сторонами А и В разместится: p_AB=(k_A) x (k_B) прямоугольников.
Есть еще один вариант размещения: вдоль стороны А разместить прямоугольники стороной b. В таком случае получим: k_A = (A div b), k_B = (B div a), p_BA = (k_A) x (k_B) прямоугольников.
Для решения нашей задачи осталось сравнить p_AB и p_BA. Какое произведение больше, таким способом и располагаем. Такую проверку и нужно выполнить во всем диапазоне значений А (от 1 до 100, например).
for A:=1 to 100 do begin
B:=N-A;
....
end;
После окончания работы цикла выводим максимальное из всех произведений и значения А и В для этого произведения.
Теперь для короба. Все то же самое, только вводим третью переменную - С.
Имеем А+В+С=N; C=N-(A+B). Для трех переменных количество сравниваемых переменных будет равно 3!=6. Это будут произведения p_ABC, p_ACB, p_BAC, p_BCA, p_CAB, p_CBA.
p_ABC:=(A div a)*(B div b)*(C div c)
p_ACB:=(A div a)*(B div c)*(C div b)
p_BAC:=(A div b)*(B div a)*(C div c)
p_BCA:=(A div b)*(B div c)*(C div a)
p_CAB:=(A div c)*(B div a)*(C div b)
p_CBA:=(A div c)*(B div b)*(C div a)
Проверку придется выполнять в диапазоне изменения двух переменных А и В через вложенный цикл.
for A:=1 to 100 do
for B:=1 to 100 do begin
C:=N-(A+B);
....
end;
end;
Также, после окончания работы цикла определится максимальное из произведений и три переменные для этого произведения.
Если Вы участвовали в олимпиаде по программированию, уверен, вы владете языком Паскаль и сможете легко составить программу на основании вышеизложенного алгоритма. Здесь не придется даже прибегать к массивам.
Это седьмая задача из второго тура Регионального этапа (Всероссийская олимпиада школьников по информатике 2013-14). Посмотрите здесь, есть ссылки на Материалы олимпиады (текст условия, решение и разбор): https://neerc.ifmo.ru/school/archive/2013-2014.html
сейчас в институте отличники студенты знают о паскале только что он существует, остальные оканчивающие институт когда речь идёт о паскале говорят что не понимают о чем им говорят, а ты зачемто какието программы пытаешся писать на нём...? ты в институт поступишь с тебя не кто знаний этих не спросит, придёт староста перед экзаменом скажет цену, заплатиш сдашь, не заплатиш не сдашь