Top.Mail.Ru
Ответы

Задача на с++

За многие годы заточения узник замка Иф проделал в стене прямоугольное отверстие размером D×E. Замок Иф сложен из кирпичей размером A×B×C. Определите, сможет ли узник выбрасывать кирпичи в море через это отверстие, если стороны кирпича должны быть параллельны сторонам отверстия.

Входные данные:

Программа получает на вход числа A, B, C, D, E. Все числа натуральные, не превосходящие 10000.

Выходные данные:

Программа должна вывести слово YES или NO.

Примеры
Ввод
1
1
1
1
1
Вывод
YES
Ввод
2
2
2
1
1
Вывод
NO
--------------------------------------------------------------------------------------------------------------------------------------
Я написал такой код

#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
if (d * e >= a * b || d * e >= a * c || d * e >= b * c) {
cout << "YES";
}
else {
cout << "NO";
}
}

Сайт почему-то показывает что мой код прошел 3 проверки, а на 4й ответ не такой, не понимаю что здесь не так

По дате
По рейтингу
Аватар пользователя
Ученик

Проверка по площади не верна. Кирпич может быть километровым но толщиной в 1 ангстрем. Алгоритм - сравнение двух меньших сторон кирпича со сторонами отверстия.

Аватар пользователя
Профи

спасибо, попробовал вот это и помогло:

#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
if (a > b) {
a = a + b;
b = a - b;
a = a - b;
}
if (b > c) {
b = b + c;
c = b - c;
b = b - c;
}
if (a > b) {
a = a + b;
b = a - b;
a = a - b;
}
if (d >= a && e >= b || e >= a && d >= b) {
cout << "YES";
}
else {
cout << "NO";
}
}

Аватар пользователя
Искусственный интеллект
123456789101112131415161718192021222324252627282930313233343536373839404142434445
 #include <algorithm> 
#include <iostream> 
using namespace std; 
class Brick { 
public: 
    pair<double, double> least()const { 
        pair<double, double> box; 
        box.first = min(a, b); 
        box.second = max(a, b); 
        if (c < box.first) { 
            box.second = box.first; 
            box.first = c; 
        } else if (c < box.second) { 
            box.second = c; 
        } 
        return box; 
    } 
private: 
    double a; 
    double b; 
    double c; 
    friend istream& operator>>(istream& inp, Brick& brick) { 
        return inp >> brick.a >> brick.b >> brick.c; 
    } 
}; 
class Hole { 
public: 
    bool ispasses(const Brick& brick)const { 
        const auto [first, second] = brick.least(); 
        return first <= min(a, b) && second <= max(a, b); 
    } 
private: 
    double a; 
    double b; 
    friend istream& operator>>(istream& inp, Hole& hole) { 
        return inp >> hole.a >> hole.b; 
    } 
}; 
int main() { 
    Brick brick; 
    cin >> brick; 
    Hole hole; 
    cin >> hole; 
    puts(hole.ispasses(brick) ? "YES" : "NO"); 
} 
Аватар пользователя

Попробуй такое усливие

a >= d && b >= e || a >= e && b >= d || b >= d && c >= e || b >= e && c >= d

Аватар пользователя
Профи

Великолепная задача, удачи.



Видео по теме