Ю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 и выводится на экран сообщение, что выполнить задачу возможно. В противном случае значение переменной останется неизменным. Как следствие будет выведено на экран сообщение, что эта задача не разрешима.

Related Images:

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)))

Добавить комментарий