Soy nuevo en C ++ La entrada y salida son manejadas por el sistema, solo podemos manipular el cuerpo de la función max_of_four () para obtener nuestra o / p.

Así es como lo resolví

#include <iostream>
#include <cstdio>
using namespace std;

int max_of_four(int a, int b, int c, int d)
{
    int max = a;
    if(b>a)
    {
        if (c>b)
        {
            if(d>c)
            {
                max = d;
            }
            else 
            {
                max = c;
            }
        }
        else if(d>b)
        {
            max = d;
        }
        else
        {
           max = b;
        }
    } 
    else if(c>a) 
    {
        if(d>c)
        {
            max =d;
        }
        else
        {
            max = c;
        }
    } 
    else if(d>a)
    {
        max = d;
    }
    else
    {
        max = a; 
    }
    return max;
}

int main() 
{
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);

    return 0;
}

Podemos verificar eficientemente a medida que obtenemos entradas una por una, pero en este caso, no podemos tocar el bloque principal sino solo el bloque de funciones. La forma en que he resuelto parece demasiado manual. ¿Hay alguna forma más rápida de resolver este problema?

c++
-2
Subash Gowthaman 10 sep. 2018 a las 08:46

4 respuestas

La mejor respuesta

Puede usar la función std::max():

int max_of_four(int a, int b, int c, int d)
{
    return max(a,max(b,max(c,d)));
}

Pero si restringió no usar ninguna función incorporada (a veces restrinjo a mi alumno para que no use ninguna función incorporada), otra solución sin la función max() es guardar el valor máximo temporal y luego iterar a todas las variables:

int max_of_four(int a, int b, int c, int d)
{
    int max = a;
    if(b>max) max = b;
    if(c>max) max = c;
    if(d>max) max = d;

    return max;
}
2
malioboro 10 sep. 2018 a las 05:59

La más simple es quizás eso:

/* cout, assign or return it */  std::max({a, b, c, d});

Si también es más eficiente o no, depende de la calidad de implementación de la biblioteca estándar que utiliza.

2
Öö Tiib 10 sep. 2018 a las 06:22

No estoy seguro acerca de más rápido, pero aquí hay una implementación mucho más simple.

int max_of_four(int a, int b, int c, int d)
{
   int max1 = a > b ? a : b;
   int max2 = c > d ? c : d;

   return (max1 > max2 ? max1 : max2);
}
1
R Sahu 10 sep. 2018 a las 05:50

Después de C ++ 11, la mejor manera es usar la notación lista de inicializadores y escribir

#include <algorithm>
#include <initializer_list>
std::max({a, b, c, d});

Debido a las interacciones entre la biblioteca estándar de C ++ y el compilador, esta podría ser también la solución más rápida.

0
Bathsheba 10 sep. 2018 a las 07:11