Ю2.8

Задача

Пройдет ли кирпич со сторонами [latex]a[/latex], [latex]b[/latex] и [latex]c[/latex] сквозь прямоугольное отверстие со сторонами [latex]r[/latex] и [latex]s[/latex]? Стороны отверстия должны быть параллельны граням кирпича.

A B C R S Ответ
10 8 7 4 3 Impossible
1 9 8 5 9 Possible
5 5 5 8 2 Impossible
4.5 4 4 5 5 Possible
0.5 3.4 0.8 4 2.5 Possible

Код программы на C++

Код программы на Java

 

В этой задаче я считаю, что если длины соответствующих сторон равны — то кирпич проходит не будет. Также считаем что ни одна из сторон не может быть нулем. Поскольку нам надо проверить входит ли кирпич в щель в общем, мы имеем право рассматривать три варианта положения кирпича относительно щели. Во всех трех случаях алгоритм одинаков. Он состоит в сравнении сторон щели и сторон грани.  По крайней мере две стороны кирпича должны быть меньше двух сторон щели. Если два условия выполняются — то переменной [latex]x[/latex] присваивают значение true и выводится на экран сообщение, что выполнить задачу возможно. В противном случае значение переменной останется неизменным. Как следствие будет выведено на экран сообщение, что эта задача не разрешима.

Царев Николай Александрович
Царев Николай Александрович

Latest posts by Царев Николай Александрович (see all)

5 thoughts on “Ю2.8

  1. — Что означает «параметры кирпича или щели сходятся»? Совпадают? Напишите чётче, что должно совпадать.
    — Что означает «рассматривать кирпич с трех разных пар граней»? Грань кирпича, это прямоугольник. Какие три пары прямоугольников Вы имеете в виду? Подберите правильные слова, пожалуйста. Или удалите этот абзац.
    — Нумерация сторон кирпича не задана. Просто пишите возможно или нет. Без указания 1, 2 или 3.
    — Довольно сложно находите решение. По Вашему, совершенно справедливому замечанию, нужно выбрать такие 2 измерения кирпича (всего 3 варианта) чтобы в некотором порядке они были меньше сторон отверстия. Т.е. всего шесть пар сравнений в одном условии. Т.е. при правильной формулировке условий 3 внешних условных оператора с суммами длинами сторон оказываются излишними.
    Ваша программа работает правильно, поскольку из выполнения Ваших 15 условий следует то, что я написал. Но если, в 23-й строке условие записать так
    ((a < r) && (b < s)) || ((b < r) && (a < s)), то 22-я строка не понадобится. Ну и условия из 31-й и 39-й можно дописать сюда же через логическое "или". Могу зачесть работу в таком виде как сейчас, но снизив балл. Или исправьте и напишите, когда будет готово к проверке.

  2. Теперь точно нет. Вы пишите «Каждая сторона кирпича должна быть меньше хотя бы одной стороны щели». Это неверно. Та сторона вдоль которой кирпич двигается может быть любой длины. Исправьте это в описании.
    — Строки 18, 19, 22 нужно сдвинуть вправо относительно соседей. Строки 15,16 тоже лучше сдвигом подогнать под соответствующий текст из 14-й.
    — «Оно состоит» — кто оно?
    — «В противном случае значение переменной не будет присвоено». Это не так. Значение уже присвоено в 9-й строке. Я догадываюсь, что Вы хотите сказать. Но лучше написать всё вразумительно.

  3. в Java нарушены отступы, кроме того лучше:

    boolean x= (((a < r) && (b < s)) || ((b < r) && (a < s))) || (((b < r) && (c < s)) || (( c < r) && (b < s))) || (((a < r) && (c < s)) || ((c < r) && (a < s)))