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

Максимальный периметр - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, является ли введенный символ числом http://www.cyberforum.ru/cpp-beginners/thread828202.html
Написать программу, которая вводит один символ с клавиатуры и выводит сообщение, является ли введенный символ числом (Коды числовых символов – от 48 до 57). Заранее очень благодарен!
C++ Оптимизация полного перебора Пусть требуется подобрать пин-код длиной 4 символа (может содержать как цифры и буквы, так и другие символы). Использую метод полного перебора: ааа ааб ... яяя Как оптимизировать... http://www.cyberforum.ru/cpp-beginners/thread828201.html
C++ Самое длинное слово
Дана строка, содержащая пробелы. Найдите в ней самое длинное слово, выведите это слово и его длину. Формат входных данных Задана одна строка, содержащая пробелы. Слова разделены ровно одним...
C++ Второклассная задача
У второклассников очень популярна следующая задача: 101=1 8181515=4 1111112=0 8888888=14
C++ Делаем срезы http://www.cyberforum.ru/cpp-beginners/thread828191.html
Дана строка. Сначала выведите третий символ этой строки. Во второй строке выведите предпоследний символ этой строки. В третьей строке выведите первые пять символов этой строки. В...
C++ одномерные массивы (Найдите 6-ой член последовательности) Найдите 6-ой член последовательности A(i)=A(i-1)*A(i-1)+1 , если А(1)=5. подробнее

Показать сообщение отдельно
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
05.04.2013, 08:47
Вариант прямым перебором. Конечно, можно оптимизировать с помощью матрицы расстояний и поиска максимальной петли, но будет дюже хитро.
Не люблю консольный ввод, поэтому задаю случайными числами. Прокомментировал, где поправить.
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
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <iostream>
 
 
struct Point {
  int x, y;
  Point() : x(0), y(0) {}
  Point(int x, int y) : x(x), y(y) {}
};
 
double getDistance(const Point &a, const Point &b) {
  return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
};
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  int numberOfPoints = 3 + rand() % 88; // считать вместо задания числом
  Point *points = new Point[numberOfPoints];
  
  for (int i = 0; i < numberOfPoints; ++i) {
    // считать вместо задания случайным значением
    points[i] = Point(rand() % 103, rand() % 103);
  }
  
  double maximumPerimeter = 0.0;
  for (int i = 0; i < numberOfPoints - 2; ++i) {
    for (int j = i + 1; j < numberOfPoints - 1; ++j) {
      double sideA = getDistance(points[i], points[j]);
      for (int k = j + 1; k < numberOfPoints; ++k) {
        double sideB = getDistance(points[i], points[k]);
        double sideC = getDistance(points[j], points[k]);
        double perimeter = sideA + sideB + sideC;
        if (perimeter > maximumPerimeter) {
          maximumPerimeter = perimeter;
        }
      }
    }
  }
  std::cout << maximumPerimeter << std::endl;
  
  delete [] points;
 
  std::cin.get();
  return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru