El triángulo de mayor área

A partir de dos segmentos de cualquier longitud, es posible formar un triángulo añadiendo un tercero. De hecho, podremos formar un número infinito de triángulos dependiendo del ángulo que formemos con los dos segmentos originales:

Triángulos

De todos esos triángulos hay uno especial por ser el de mayor área. ¿Sabes encontrarlo?

Entrada

El programa deberá procesar múltiples casos de prueba, cada uno recibido en una línea por la entrada estándar.

Un caso de prueba estará formado por una pareja de números naturales mayores que 0 y menores que 1.000, cada uno indicando la longitud de uno de los segmentos. La entrada terminará con un caso de prueba especial, que no deberá procesarse, en el que ambos números serán 0.

Salida

Para cada caso de prueba el programa escribirá, en una línea, el área del mayor triángulo que se pueda formar con los dos segmentos. La salida se redondeará a un único decimal.

Entrada de ejemplo

23 13
16 29
0 0

Salida de ejemplo

149.5
232.0

Autores: Pedro Pablo Gómez Martín; Marco Antonio Gómez Martín; Alberto Verdejo

Solución propuesta

import math

def f_area(a, b, c):
    sol = 0
    s = (a + b + c)/2
    r = s*(s - a)*(s - b)*(s - c)
    if  r > 0:
        sol = math.sqrt(r)
    return sol

a, b = str(input()).split(" ")
a = int(a)
b = int(b)
while(a != 0 and b != 0):
    c = 1
    area = f_area(a, b, c)
    max = 0
    while (max == 0 or area > max):
        c += 1
        max = area
        area = f_area(a, b, c)
    print(round(area,1))
    a, b = str(input()).split(" ")
    a = int(a)
    b = int(b)

En la solución propuesta se supone que cada aumento del lado desconocido va a suponer un aumento del área del triángulo hasta alcanzar el área máxima, a partir de la cual el área resultante una vez aumetnado el lado será menor que el anterior.

Además, para calcular el área del triángulo, dado que desconocemos la altura del triángulo, no podemos utilizar la más conocida A = (b*h)/2. En este caso debemos usar la fórmula de Herón, que utiliza solo los tres lados para calcular el área.

Enlace del código

Enlace en aceptaelreto.com

Publicado el 22 de mayo de 2017