Задача
Пройдет ли кирпич со сторонами [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++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; int main() { double a, b, c, r, s; bool x = false; // Переменная, с помощью которой мы увидим невозможность выполнения задачи cout << "Write size of brick: \n"; cin >> a >> b >> c; cout << "Write size of slot: \n"; cin >> r >> s; if ((((a < r) && (b < s)) || ((b < r) && (a < s)))|| //Проверка трех вариантов расположения кирпича (((b < r) && (c < s)) || (( c < r) && (b < s)))|| (((a < r) && (c < s)) || ((c < r) && (a < s)))) x=true; printf( x? "Possible" : "Impossible"); return 0; } |
Код программы на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double a,b,c,r,s; boolean x=false; System.out.println("Write size of brick:"); a=in.nextDouble(); b=in.nextDouble(); c=in.nextDouble(); System.out.println("Write size of slot: "); r=in.nextDouble(); s=in.nextDouble(); if ((((a < r) && (b < s)) || ((b < r) && (a < s))) || (((b < r) && (c < s)) || (( c < r) && (b < s)))|| (((a < r) && (c < s)) || ((c < r) && (a < s)))) x=true; if(x) System.out.println("Possible"); else System.out.println("Impossible "); } } |
В этой задаче я считаю, что если длины соответствующих сторон равны — то кирпич проходит не будет. Также считаем что ни одна из сторон не может быть нулем. Поскольку нам надо проверить входит ли кирпич в щель в общем, мы имеем право рассматривать три варианта положения кирпича относительно щели. Во всех трех случаях алгоритм одинаков. Он состоит в сравнении сторон щели и сторон грани. По крайней мере две стороны кирпича должны быть меньше двух сторон щели. Если два условия выполняются — то переменной [latex]x[/latex] присваивают значение true и выводится на экран сообщение, что выполнить задачу возможно. В противном случае значение переменной останется неизменным. Как следствие будет выведено на экран сообщение, что эта задача не разрешима.