Задача
Даны размеры прямоугольных открытки и конверта. Требуется определить, поместится ли открытка в конверт.
Входные данные
В первой строке находятся размеры открытки, во второй — размеры конверта. Размеры открытки и конверта — целые положительные числа, не превосходящие $100.$
Выходные данные
Если открытку можно вложить в конверт, вывести $Possible,$ если нет — вывести $Impossible$.
Тесты
№ | Входные данные | Выходные данные |
1 | 1 10 9 9 |
Possible |
2 | 20 40 2 4 |
Possible |
3 | 50 20 40 40 |
Impossible |
4 | 10 4 5 5 |
Impossible |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <cmath> #include <iostream> using namespace std; int main() { int H, W, h, w; cin >> h >> w >> H >> W; int t = max(H, W); H = min(H, W); W = t; t = max(h, w); h = min(h, w); w = t; int d2 = w * w + h * h; if (h <= H and w <= W or H * sqrt(d2 - W * W) + W * sqrt(d2 - H * H) <= w * w - h * h) cout << "Possible"; else cout << "Impossible"; return 0; } |
Решение
Объявляем и вводим переменные $H$, $W$, $h$, $w$, где будем хранить длины открыток и конверта.
Потом находим наибольшую сторону конверта и открытки, найдем диагональ конверта.
Пользуясь тем, что мы знаем точно какие варианты «Possible» ставим выводим их, а в противном случае «Impossible».
Ссылки
ideone

Во втором примере у Вас, видимо, ошибка.
Пояснение не особо поясняет, как прийти именно к той формуле, которую Вы используете.
Сравнение чисел с плавающей точкой лучше осуществлять не оператором <=, а так:
Нам удалось обойтись целыми. Решили не извлекать корень.
Ну, вот, сделали бы еще один код с ветвлением было бы две задачи.
Ну, ничего, какие наши годы? Продолжайте.