Консультация № 174147
11.11.2009, 21:53
35.00 руб.
0 7 1
Уважаемые эксперты, решите пожалуйста олимпиадную задачу по информатике: Для упрочнения древней кремлевской стены необходимо построить кирпичную подпорку треугольного вида. Требования к форме подпорки таковы: 1. всего используется n кирпичей размером 2 по ширине и 1 по высоте; 2. ряды кирпичей примыкают вплотную к стене; 3. каждый ряд снизу содержит хотя бы на 1 кирпич больше, чем ряд сверху. Какова наибольшая возможная высота подпорки? Какова при этом наименьшая ширина нижнего ряда? Заранее спасибо.

Обсуждение

Неизвестный
12.11.2009, 10:36
общий
Задача некорректная: 1) стена-то вертикальная? На самом деле это далеко не так! Раз упрочить нужно, значит падает, кренится, рушится. 2) Раз не задана высота стены (а почему бы подпорку и не сделать выше её?), ни максимальный размер по горизонтали (кстати, и это не задано!!), то как можно спрашивать "какова наибольшая возможная высота подпорки"? При заданных условия можно строить ее до Луны, а потом чуть отдохнуть и продолжать дальше
Да и наименьшая ширина равна, ессно, 1, а то и вовсе 0. Так сказать, виртуальная ...
ЗЫ: а ширина это вдоль стены или под углом к ней? И под каким?
--
Однако, олимпиада ....
Неизвестный
12.11.2009, 11:37
общий
Семашкина Надежда Сергеевна:
Доброе утро! Минимальная ширина соответствует максимальной высоте, то есть кирпичи укладывем "стоя". Сначала строим "равнобедренный", то есть x*x треугольник, затем прикладываем, начиная с нижних рядов то, что осталось

Код:

program p174147;
{ Для упрочнения древней кремлевской стены необходимо построить кирпичную
подпорку треугольного вида. Требования к форме подпорки таковы:
1. всего используется n кирпичей размером 2 по ширине и 1 по высоте;
2. ряды кирпичей примыкают вплотную к стене;
3. каждый ряд снизу содержит хотя бы на 1 кирпич больше, чем ряд сверху.
Какова наибольшая возможная высота подпорки?
Какова при этом наименьшая ширина нижнего ряда?
}
var
n: integer;
min_w: integer;
max_h: integer;
x: integer; { целая часть положительного корня квадратного уравнения }
d: real; { дискриминант }
a,b,c: real; { коэффициенты квадратного уравнения }
ostatok: integer;
begin
write('n=');
readln(n);

a:= 1;
b:= 1;
c:= -2*n;
d:=b*b-4*a*c;
x:=trunc((-b+sqrt(d))/2); { построили треугольник }
ostatok := n-(1+x)*x div 2; { лишние кирпичи }
min_w := x + ostatok div x; { если осталось больше, чем высота треугольника }
if ostatok mod x > 0 then { если осталось меньше, чем высота треугольника }
min_w := min_w+1;
max_h := x*2; { кирпич "стоя " }

writeln('x=',x, ' ostatok=', ostatok);
writeln('min_w=', min_w, ' max_h=', max_h);
readln;
end.


давно
Академик
320937
2216
16.11.2009, 14:34
общий
это ответ
Здравствуйте, Семашкина Надежда Сергеевна. Минимальная ширина соответствует максимальной высоте, то есть кирпичи укладывем "стоя". Сначала строим "равнобедренный", то есть x*x треугольник, затем прикладываем, начиная с нижних рядов то, что осталось. Остается не более x кирпичей, например, в случае, 14 кирпичей сначала получаем треугольник 4*4, то есть расходуем (1+4)/2*4=10 кирпичей, остается 4. Таким образом, если остаток есть, увеличиваем ширину на 1. Программа в приложении

Приложение:
program p174147a;
{ Для упрочнения древней кремлевской стены необходимо построить кирпичную
подпорку треугольного вида. Требования к форме подпорки таковы:
1. всего используется n кирпичей размером 2 по ширине и 1 по высоте;
2. ряды кирпичей примыкают вплотную к стене;
3. каждый ряд снизу содержит хотя бы на 1 кирпич больше, чем ряд сверху.
Какова наибольшая возможная высота подпорки?
Какова при этом наименьшая ширина нижнего ряда?
}
var
n: integer;
min_w: integer;
max_h: integer;
d: real; { дискриминант }
a,b,c: real; { коэффициенты квадратного уравнения }
ostatok: integer;
begin
write('n=');
readln(n);

if (n<=0) then { при неверном вводе высота и ширина 0 }
begin
max_h := 0;
min_w := 0;
end
else
begin
a:= 1;
b:= 1;
c:= -2*n;
d:=b*b-4*a*c;
min_w:=trunc((-b+sqrt(d))/2); { построили треугольник }
ostatok := n-(1+min_w)*min_w div 2; { лишние кирпичи }
max_h := min_w*2; { кирпич "стоя " }
if ostatok>0 then
min_w := min_w+1;
end;

writeln('min_w=', min_w, ' max_h=', max_h);
readln;
end.
4
давно
Мастер-Эксперт
680
2811
16.11.2009, 17:12
общий
А что, аналитическое решение дать никто не может? Там же одна строчка.
Неизвестный
16.11.2009, 17:36
общий
Сучкова Татьяна Михайловна:
А зачем давать ответ по некорректно сформулированной задаче?
давно
Мастер-Эксперт
680
2811
16.11.2009, 18:25
общий
Boriss:
У нас в школе бывают задачки и похуже. Мало ли кто их придумавает. Мне, например, не понравилось, что даны только два измерения (не указана длина - а если я хочу кирпичи на торец ставить?!) Ну да ладно, будем обходиться тем, что есть. Считаем стену прямой. Подпорки ставили вообще-то для укрепления при нападении врагов... Далее: у нас дано исходное условие - N кирпичей. Вот исходя из этого количества и рассчитываем высоту стены. При этом, чтоб высота была максимальной, естественно, тот ряд, что выше, будет на 1 кирпич короче. А далее все просто...
Неизвестный
17.11.2009, 13:22
общий
Семашкина Надежда Сергеевна:
Добрый день! Вас не затруднит дать комментарий к оценке?
Форма ответа