El promedio de los antípodas
Dado un arreglo de enteros, crea antipodesAverage(const std::vector<int>&) y genera un arreglo más pequeño en tres pasos:
- Divide el arreglo en dos mitades exteriores de igual tamaño. Si su longitud es impar, descarta el elemento central para que ambas mitades sean iguales.
- Invierte la segunda mitad y suma cada valor de la primera mitad con el valor correspondiente de la segunda mitad invertida.
- Divide entre dos cada suma resultante.
Ejemplos
antipodesAverage(std::vector<int>{1, 2, 3, 4}) ➞ std::vector<double>{2.5, 2.5}
// La parte izquierda [1, 2] se empareja con la parte derecha invertida [4, 3]; las sumas [5, 5] se convierten en [2.5, 2.5].
antipodesAverage(std::vector<int>{1, 2, 3, 4, 5}) ➞ std::vector<double>{3, 3}
// Descarta el valor central 3. La parte izquierda [1, 2] se empareja con [5, 4]; las sumas [6, 6] se convierten en [3, 3].
antipodesAverage(std::vector<int>{-1, -2}) ➞ std::vector<double>{-1.5}
// (-1 + -2) / 2 = -1.5.Notas
- Cada entrada contiene al menos dos números.
- Los valores de entrada son números enteros, positivos o negativos, pero los promedios devueltos pueden ser valores de punto flotante.
- Los pasos pueden implementarse por separado o combinarse sin cambiar el resultado.