![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
#$# PaVeL #$# |
![]() ![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 91 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Предупреждаю темой не ошибся...
![]() Задача: Катя шила сарафан, у неё остался кусок треугольной (*треугольник - прямоугольный) ткани, вопрос: можно ли из указанного куска ткани вырезать два кармана (*прямоугольной формы) указанных размеров??? Пожалуйста помогите, надежда на вас, уже трое суток мучаюсь... Что мне приходило в голову: 1) Комбинировать подстановку треугольников всевозможными способами - код слишком длинный и слишком сложный - явно неподходит... 2) брать треугольник прикладывать каждый из карманов к сторонам и отсекать от треугольника эту часть и пытаться в оставшийся вписать другой карман... Пожалуйста помогите, срочно необходимо... до воскресения... в худшем случае хоть алгоритм напишите (желательно с формулами)... |
![]() ![]() |
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Вот набросал кое-что, но если честно я не уверен, надо побольше потестить
![]() var
c_a, c_b: Extended;
function Hypotenuse(const x: Extended): Extended;
begin
Hypotenuse := -x * c_a / c_b + c_a;
end;
function CanInclude(const x, y, s_a, s_b: Extended): Boolean;
begin
CanInclude := Hypotenuse(x + s_b) >= (y + s_a);
end;
function GetSolution(s_a, s_b: Extended): Boolean;
var
_result: Boolean;
T: Extended;
begin
_result := CanInclude(0, 0, s_a, s_b);
if not _result then begin
T := s_a; s_a := s_b; s_b := T;
_result := CanInclude(0, 0, s_a, s_b);
end;
if _result then begin
_result := CanInclude(0, s_a, s_a, s_b) or CanInclude(0, s_a, s_b, s_a);
if not _result then
_result := CanInclude(s_b, 0, s_a, s_b) or CanInclude(s_b, 0, s_b, s_a);
end;
GetSolution := _result;
end;
var
s_a, s_b: Extended;
begin
c_a := 10; // катет №1
c_b := 10; // катет №2
s_a := 8; // сторона прямоуголника №1
s_b := 1; // сторона прямоуголника №2
if GetSolution(s_a, s_b) then writeln('Yes')
else writeln('No');
end.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
#$# PaVeL #$# |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 91 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Вообшето кармана два... Я вроде решил задачу, как с компьютера зайду (через телефон сижу)- выложу код...
|
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата Вообшето кармана два... эээ иии ? в моей программе подразумевается, что размер карманов s_a * s_b(это площадь одного кармана), я же вроде комментарии поставил ... может конечно по коду не заметно, в общем GetSolution вернет true если в треугольнике с катетами c_a & c_b можно разместить 2 прямоугольника со сторонами s_a & s_b Сообщение отредактировано: klem4 - 13.02.2008 10:06 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 7:48 |