Форум программистов, компьютерный форум CyberForum.ru

Вписанные прямоугольники - C++

Восстановить пароль Регистрация
 
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
11.09.2011, 09:52     Вписанные прямоугольники #1
Даны 2 прямоугольника. Определить можно ли вписать один в другой.
Пример 1 10 вписать в 9 9 возможно.

Делал так: надо их диагонали найти, и точка пересечения одного должна совпадать со второй, но что-то не получается, мб исключения.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.09.2011, 09:55     Вписанные прямоугольники #2
Стороны первого попарно меньше либо равны сторонам второго - первый можно вписать во второй.
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
11.09.2011, 10:46  [ТС]     Вписанные прямоугольники #3
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main()
{
 int a,b,c,d;
 cin >> a >> b >> c >> d;
 cout << ( ((a*a+b*b)<=(c*c+d*d)) ? "Possible" : "Impossible" ) << endl;
 return 0;
}

Nameless One, не совсем верно, можно под углом же делать, надо ещё же диагонали сравнивать

Добавлено через 6 минут
Кроме диагоналей что-то ещё надо сравнивать, стороны не пойму как, они больше могут быть, соотношения нужны

Добавлено через 32 минуты
Попробовал так! 2 теста не проходит.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
 double a,b,c,d,tp;
 cin >> a >> b >> c >> d;
 if (a>b) { tp=a; a=b; b=tp; }
 if (c>d) { tp=c; c=d; d=tp; }
 if (a<=c && b<=d) { cout << "Possible" << endl; return 0; }
 if (a>c && b>d) { cout << "Impossible" << endl; return 0; }
 if (c*c+d*d>=a*a+b*b+2*a*b) { cout << "Possible" << endl; return 0; }
 cout << "Impossible" << endl;
 return 0;
}
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 10:47     Вписанные прямоугольники #4
AvengerAlive, эта задача?
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,688
12.09.2011, 12:54     Вписанные прямоугольники #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <algorithm>
#include <cmath>
#include <limits>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
bool  rectangle_ab_can_be_inscribed_in_rectangle_AB
    (
        double  a,
        double  b,
        double  A,
        double  B
    )
{
    if(a > b)
    {
        std::swap(a, b);
    }
 
    if(A > B)
    {
        std::swap(A, B);
    }
 
    if(a <= A && b <= B)
    {
        return true;
    }
 
    double  a_b_diag_sqr  = a * a + b * b;
    double  sin_alpha     = ( a * A + b * sqrt(a_b_diag_sqr - A * A) ) / a_b_diag_sqr;
    double  cos_alpha     = sqrt(1 - sin_alpha * sin_alpha); 
    double  val           = b * sin_alpha + a * cos_alpha;
    
    return  val < B * ( 1 + std::numeric_limits<double>::epsilon() );          
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
 
    std::cout << "Введите стороны письма:"
              << std::endl
              << "a = ";
 
    double  a = 0;
    std::cin >> a;
    
    std::cout << "b = ";
    int  b = 0; 
    std::cin >> b;
 
    std::cout << std::endl
              << "Введите стороны конверта:"
              << std::endl
              << "A = ";
 
    double  A = 0;
    std::cin >> A;
    
    std::cout << "B = ";
    int  B = 0; 
    std::cin >> B;
 
    std::cout << "Письмо "
              << (rectangle_ab_can_be_inscribed_in_rectangle_AB(a, b, A, B) ? "можно" : "нельзя")
              << " вложить в конверт."
              << std::endl;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.09.2011, 21:23     Вписанные прямоугольники #6
AvengerAlive, очень рекомендую скачать книгу Федора Меньшикова "Олимпиадные задачи по программированию". В этой книге есть задача 3D и разбор к ней, а также много других задач с разборами (лучше чем там описано никто Вам про эти задачи не объяснит, ну или почти никто...)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 21:51     Вписанные прямоугольники
Еще ссылки по теме:

Прямоугольники C++
C++ Определить, пересекаются ли прямоугольники, заданные координатами своих углов
Равновеликие прямоугольники C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
12.09.2011, 21:51  [ТС]     Вписанные прямоугольники #7
Dani, ага
Yandex
Объявления
12.09.2011, 21:51     Вписанные прямоугольники
Ответ Создать тему
Опции темы

Текущее время: 10:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru