16.08.2012, 14:25. Просмотров 1365. Ответов 5
Условие задачи: В одномерном массиве с четным количеством элементов (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
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
| #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;
vector<int> d;
vector<int> e;
vector<int> dotmin1;
vector<int> dotmax1;
vector<int> dotmin2;
vector<int> dotmax2;
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++)
for (int j = i+1; j < n; j++)
{
b.push_back(sqrt((a[2*j] - a[2*i]) * (a[2*j] - a[2*i]) + (a[2*j+1] - a[2*i+1]) * (a[2*j+1] - a[2*i+1])));
d.push_back(i+1);
e.push_back(j+1);
}
for (int i = 0; i < b.size(); i++)
cout << b[i] << " ";
cout << endl;
for (int i = 0; i < d.size(); i++)
cout << d[i] << " ";
cout << endl;
for (int i = 0; i < e.size(); i++)
cout << e[i] << " ";
cout << endl;
float min = b[0];
for (int i = 0; i < b.size(); i++)
if (min >= b[i])
{
min = b[i];
dotmin1.push_back(d[i]);
dotmin2.push_back(e[i]);
}
cout << "MIN: " << min << endl;
for (int i = 0; i < dotmin1.size(); i++)
cout << dotmin1[i] << " и " << dotmin2[i] << endl;
float max = b[0];
for (int i = 0; i < b.size(); i++)
if (max <= b[i])
{
max = b[i];
dotmax1.push_back(d[i]);
dotmax2.push_back(e[i]);
}
cout << "MAX: " << max << endl;
for (int i = 0; i < dotmax1.size(); i++)
cout << dotmax1[i] << " и " << dotmax2[i] << endl;
system("PAUSE >> null");
} |
|
Для тестирования используйте точки: -2,1; 1,2; 0,0; 4,-3;
Точки записывать в командную строку так, как они написаны здесь.
Правильный ответ: для минимального расстояния точки 1 и 3; 2 и 3
Правильный ответ: для максимального расстояния точки 1 и 4
У меня на выходе:
для минимального расстояния точки 1 и 2; 1 и 3; 2 и 3
для максимального расстояния точки 1 и 2; 1 и 4
Откуда берутся точки 1 и 2 в обоих случаях?