Перейти к содержимому


- - - - -

Помогите решить задачу на С++


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 FaYsT

FaYsT

    Новичок

  • Members
  • Pip
  • 7 сообщений

Отправлено 19 Март 2009 - 10:31

Здраствуйте! Помогите решить задачу, сам в программирование ноль.

Дан массив A размером N. Каждый элемент массива представляет собой прямоугольник на плоскости, причем его стороны выровнены по осям координат (поэтому хранятся только минимальные и максимальные координаты всех его вершин).  Найти в массиве A два таких прямоугольника, которые дают пересечение с максимальной площадью. Вывести их индексы (начиная с 1) и площадь пересечения.
Пример:
Ввод                                     
  3                                   
  0 0 1 1                                 
-2 -2 3 3
  1 1 4 4


Вывод
2 3
4

Есть рабочий вариант программы только, без массивов а вводом координат.  Помогите переделать программу под задачу. Заранее спасибо!
================================================================================
==============
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#pragma hdrstop

//---------------------------------------------------------------------------
using  namespace std;
#pragma argsused
int main(int argc, char* argv[])
{
     double ax1,ax2,bx1,bx2,ay1,ay2,by1,by2,rx1,rx2,ry1,ry2,S;
     cout<<"Enter coordinat A\n";
     cin>>ax1;
     cin>>ay1;
     cin>>ax2;
     cin>>ay2;
     cout<<"Enter coordinat B\n";
     cin>>bx1;
     cin>>by1;
     cin>>bx2;
     cin>>by2;

     if ((bx1>=ax2)||(ax1>=bx2)||(by1>=ay2)||(ay1>=by2))
         {
         cout << "OSHIBKA" ;
         cin >> ax1;
         }
        else
     {

        if(ax1 < bx1) rx1 = bx1;
        else rx1 = ax1;
        if(ax2 < bx2) rx2 = ax2;
        else rx2 = bx2;

        if(ay1 < by1) ry1 = by1;
        else ry1 = ay1;
        if(ay2 < by2) ry2 = ay2;
        else ry2 = by2;

        cout << rx1 << ' ' << rx2 << ' ' << ry1 << ' ' << ry2;
        cout << "\n";

        S=(rx2-rx1)*(ry2-ry1);

        cout << "Ploshad peresecheniya pryamougolnikov:";
        cout << S;
        cout << "\n";

        cin >> ax1;
        //system ( "PAUSE");
     }
        return 0;
}
//---------------------------------------------------------------------------

Сообщение отредактировал FaYsT: 19 Март 2009 - 10:38


#2 xboxmen

xboxmen

    Посетитель

  • Members
  • PipPip
  • 66 сообщений
  • Пол:Мужчина
  • Город:Химки

Отправлено 14 Май 2009 - 15:51

Ещё актуально ? Могу помочь.

#3 VMS

VMS

    Посетитель

  • Members
  • PipPip
  • 101 сообщений

Отправлено 10 Март 2010 - 07:32

int a = StrToInt("12345");
Не нужно благодарностей  :)

#4 Vint

Vint

    Свой человек

  • Members
  • PipPipPipPipPipPip
  • 715 сообщений
  • Пол:Мужчина
  • Город:СССР
  • Интересы:С++

Отправлено 01 Февраль 2011 - 12:44

неверно) тогда будет выводится полностью одно число 12345 и не факт что вообще оно так переведется, лучше так:
int index[10];
char* str="0123456789";

for(int i = 0; i < str.size(); i ++)
  if(str[i] > '0' && str[i]<'9')
	  index[i]=StrToInt(*str[i]);  // or static_cast<int>(*str[i]); как то так)
и вывести не сложно дальше)
но удобней всего написать класс и два метода, метод перевода и метод вывода значений.

Сообщение отредактировал Vint: 01 Февраль 2011 - 12:47





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных