Ю2.11

Задача жестянщика. Можно ли из круглой заготовки радиусом  [latex]r[/latex] вырезать две прямоугольные пластинки с размерами  [latex] a[/latex] × [latex] b[/latex] и [latex] c[/latex] × [latex]d[/latex]?

1.6 3 0 3 0 We can
1.6 3 1 3 1 We can’t
  2  3 1 3 1 We can
  2  5 1 4 1 We can’t
 

Рассмотрим как выглядит прямоугольник в круге.

Безымянный

Можно заметить, что [latex] h=d1[/latex] (длина до центра окружности) — это катет прямоугольного треугольника, значит его можно найти по теореме Пифагора , зная радиус круга [latex] R[/latex]  и катит [latex] r[/latex] (в нашем случае [latex] a/2[/latex]) [latex] h=\sqrt{R^2-r^2}[/latex]). Вычитая из полученного [latex] h=d1[/latex]  ширину [latex] b[/latex] мы получим  сколько он места занимает при данной длине и ширине относительно центра круга. (Если у нас  [latex] b<d1[/latex], то для второго прямоугольника у нас будет больше места) Тоже самое мы проделываем и для второго прямоугольника и получаем наше [latex] h2=d2[/latex]. Дальше размещаем наши прямоугольники параллельно друг другу и смотрим, хватает ли места второму прямоугольнику места с учетом его ширины (Если по ширине второй прямоугольник не превышает оставшегося места) [latex]d<d2+(d1-b)[/latex].

 

Реализация на Java:

 

Ссылка на код программы.

7 thoughts on “Ю2.11

  1. — Это не метки «Можно ли вырезать два прямоугольника из круга радиусом r».
    — Уберите пожалуйста неуместный декор в заголовке и восклицательные знаки.
    — Переменные в условии должны быть набраны в laTeX.
    — Пожалуйста, не используйте странные транслитерации вроде «Mojno».
    — Поставьте пробелы после знаков препинания и перед скобками.
    — Прочтите свою единственную фразу в объяснении. Вы что-то в ней поняли?

    Анатолий! Вы дурачитесь, а мне полчаса писать Вам замечания?

  2. — Будьте добры, вставьте метки (ключевые слов), которые идентифицируют задачу. Например, если бы вы находили гипотенузу прямоугольного треугольника по теореме Пифагора, то метками были бы «катет», «гипотенуза», «треугольник», «теорема Пифагора» и т.п.
    – Поставьте пробелы после знаков препинания и перед скобками.
    – Переменные в условии должны быть набраны в laTeX.
    — «он свободного месте занимает»
    — Никогда не слышал про “обжорство прямоугольника”. Сделайте, пожалуйста ссылку на источник.
    — Сделайте ссылку на код программы в ideone или другой облачной среде, где его можно будет запустить.

  3. Многое исправлено. Засчитываю на положенные опоздавшим 8 баллов. Одно условие — исправьте недочёты:
    — «Два прямоугольника и круг» это две метки — «два прямоугольника», «круг»
    — Пожалуйста уберите пробелы перед знаками препинания. Вы реально не можете разобраться где и почему нужно ставить пробелы? Я давал ссылку на статью с правилами, но там всё довольно просто и интуитивно ясно. Может Вам помогут примеры:

    • «жестянщика.Можно» — после точки (справа от точки) нужно поставить пробел
    • «в круге .» — перед точкой (слева от точки) нужно убрать пробел
    • «( Если»— после скобки (справа от скобки) нужно убрать пробел

    Если моя ссылка Вас не убедила, просто поищите в сети информацию о том где и зачем нужно ставить пробелы. Вам может показаться это пустяком. Так оно и есть. Тем легче будет сделать как положено.

  4. Ох и интересная программа у Вас, даже не знаю, засчитать или нет. Напомню, что я не углубляюсь в условие задачи, а оцениваю корректность перевода с C++ на Java.
    А ситуация вот в чем: Ваша функция sort, что в C++ версии, что в Java работают почти одинаково. Т.е. вообще не меняют значения переменных, которые передаются — а поэтому бессмыслены. Но C++ версию очень легко изменить — передать параметры по ссылке (&), но в Java этот трюк уже не пройдет! см. http://microsin.net/programming/android/java-passing-parameters-to-method.html
    Так что, не могу засчитать работу — вот как переделать? Т.к. функцию swap нормально не напишешь! Разве что обойтись без функции и продублировать код.