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

Найти номера наиболее и наименее удаленных друг от друга точек - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
11.08.2012, 23:11     Найти номера наиболее и наименее удаленных друг от друга точек #1
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, у1, х2, у2, x3, y3 и т.д. Найти номера наиболее и наименее удаленных друг от друга точек.

Вот мой код:
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
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;
 
int main()
{ 
   int n;
   float a[n];
   cout << "Введите количество точек:" << endl;
   cin >> n;
    cout << "Введите координаты точек:" << endl;
   for (int i = 0; i < n*2; i++)
    cin >> a[i];
   system("CLS");
   vector<float> b;
   for (int i = 0; i < n; i++)
    cout << "X: " << a[2*i] << " " << setw(7) << "Y: " << a[2*i+1] << endl; // Вывод координат 
   for (int i = 0; i < n; i++)  
    b.push_back(sqrt((a[2*i] * a[2*i])+(a[2*i+1] * a[2*i+1]))); // запись в массив b расстояние от начала координат  до точек 
   for (int i = 0; i < b.size(); i++)
    cout << b[i] << " "; // Вывод расстояний 
system("PAUSE >> null");    
}
Собственно сам вопрос: Как найти все возможные разности между расстояниями, что бы потом из них найти наибольшее и наименьшее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2012, 23:11     Найти номера наиболее и наименее удаленных друг от друга точек
Посмотрите здесь:

Разработать программу для нахождения пары самых удаленных друг от друга точек C++
найти две наиболее удаленных друг от друга точки (множество точек задано на плоскости) C++
C++ Задан массив точек. Найти номера наиболее и наименее удаленных друг от друга точек.
C++ Динамическая матрица (Найти координаты двух точек, наиболее удалённых друг от друга)
C++ Найти наиболее и наименее удаленные точки. Вычисление расстояния между парой точек оформить функцией
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2012, 23:24     Найти номера наиболее и наименее удаленных друг от друга точек #2
примитивно: определить заведомо наибольшее и наименьшее расстояние, затем сравнивать каждую точку с каждой (кроме себя), и если расстояние выходит за рамки, запоминать новое.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
11.08.2012, 23:27     Найти номера наиболее и наименее удаленных друг от друга точек #3
Полный перебор (с квадратичной сложностью) :
C++
1
2
3
4
5
6
7
8
9
for (int first = 0; first < n; ++first)
{
    for (int second = first + 1; second < n; ++second)
    {
        // расстояние между точками first и second
        double dist = hypot(a[2*first] - a[2*second], a[2*first+1] - a[2*second+1]);
        // сравниваем с мин/макс... 
    }
}
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
12.08.2012, 00:11     Найти номера наиболее и наименее удаленных друг от друга точек #4
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
#include<iostream>
#include<ctime>
#include<cmath>
using namespace std;
double dist(int *a, int i1, int i2){
       return sqrt((a[i1]-a[i2])*(a[i1]-a[i2])+(a[i1+1]-a[i2+1])*(a[i1+1]-a[i2+1]));
}
int main(){
    srand(time(0));
    int n;
    cout<<"n="; cin>>n;
    int *a=new int[2*n];
    for (int i=0; i<2*n; i++){
        a[i]=rand()%200-100;
        if (i%2==0) cout<<a[i]<<"\t";
        else cout<<a[i]<<"\n";
    }
    int min1=0, min2=2*n-2, max1=0, max2=2*n-2;
    for (int i=0; i<2*n-1; i+=2)
        for (int j=i+2; j<2*n-1; j+=2){
            if (dist(a,min1,min2)>dist(a,i,j)){
               min1=i;
               min2=j;
            }
            if (dist(a,max1,max2)<dist(a,i,j)){
               max1=i;
               max2=j;
            }
        }
    cout<<endl<<"min distance "<<dist(a, min1, min2)<<":\nx1="<<a[min1]<<", y1="<<a[min1+1]<<"\nx2="<<a[min2]<<", y2="<<a[min2+1];
    cout<<endl<<"max distance "<<dist(a, max1, max2)<<":\nx1="<<a[max1]<<", y1="<<a[max1+1]<<"\nx2="<<a[max2]<<", y2="<<a[max2+1];
    system("pause");
    return 0;
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
12.08.2012, 00:18     Найти номера наиболее и наименее удаленных друг от друга точек #5
rinat_w, в циклах индексы разве не на 2 надо увеличивать? (строки 19 и 20)
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
12.08.2012, 00:19     Найти номера наиболее и наименее удаленных друг от друга точек #6
grizlik78, да, точно! уже изменил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2012, 20:16     Найти номера наиболее и наименее удаленных друг от друга точек
Еще ссылки по теме:

C++ Найти две наиболее удаленных друг от друга точки
Найти наименее удаленные друг от друга точки на плоскости C++
Найти номера двух наиболее удаленных точек C++

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

Или воспользуйтесь поиском по форуму:
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
12.08.2012, 20:16  [ТС]     Найти номера наиболее и наименее удаленных друг от друга точек #7
Всем большое спасибо!
Yandex
Объявления
12.08.2012, 20:16     Найти номера наиболее и наименее удаленных друг от друга точек
Ответ Создать тему
Опции темы

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