математика — Как найти максимальную площадь среди заданных треугольников при переполнении стека

На входе должно быть n — количество треугольников (1 <= n <= 20) и затем n строк по три двойных в каждой (соответствующих каждой из сторон треугольника). Выход должен быть «n», который имеет максимальную площадь треугольника.

#include <iostream>
#include <math.h>
using namespace std;

const int MAX_SIZE = 20;

int main()
{
int n, s, p;
double max = 0;
cin >> n;
int x[MAX_SIZE];
for (int i = 0; i < n; i++)
{
double y[2];
for (int j = 0; j < 3; j++)
cin >> y[j];
p = (y[0] + y[1] + y[2]) / 2;
s = sqrt(p * (p - y[0]) * (p - y[1]) * (p - y[3]));
if (s >= max) max = s;
}
cout << max;
return 0;
}

Это то, что я сделал до сих пор. Кстати, «р» обозначает полупараметр … — Я использую формулу Херона. Я даже не получил его, чтобы «сосредоточиться» на n, где максимальная площадь, а на самом деле максимальная площадь, но это не работает, но вместо этого дает мне большую ошибку. Есть идеи?

0

Решение

У вас есть несколько проблем:

  • Вам нужно изменить s а также p от intс doubles (в противном случае вы получите нежелательное усечение ваших результатов).
  • Вам нужно изменить double y[2]; в double y[3]; (поскольку вам нужно три длины стороны, а не две).
  • + Изменить s = sqrt(p * (p - y[0]) * (p - y[1]) * (p - y[3])); в s = sqrt(p * (p - y[0]) * (p - y[1]) * (p - y[2])); (поскольку y[3] находится за пределами вашего массива).

Обратите внимание, что вы можете избавиться от вашего массива x, поскольку вы, кажется, на самом деле нигде не используете его.

1

Другие решения

Вы выделяете только 2 дубля. Вам нужно 3, попробуйте double y[3],

1