Что было бы самым быстрым способом найти максимум из четырех чисел, если бы мы могли редактировать только тело функции?

Я новичок в C++ Ввод и вывод обрабатываются системой, мы можем только манипулировать телом функции max_of_four (), чтобы получить наш o / p.

вот как я решил,

#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;
}

мы можем эффективно проверять, поскольку мы получаем входные данные один за другим, но в этом случае мы не можем касаться основного блока, а только функционального блока. То, как я решил, кажется слишком ручным. Есть ли более быстрый способ решить эту проблему?

2
0
161
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Не уверен, что быстрее, но вот гораздо более простая реализация.

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);
}

Спасибо @R Sahu, так просто и точно.

Subash Gowthaman 10.09.2018 08:34
Ответ принят как подходящий

Вы можете использовать функцию std::max():

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

Но если вы ограничили использование каких-либо встроенных функций (иногда я ограничиваю своего ученика, чтобы он не использовал какие-либо встроенные функции), другое решение без функции max() заключается в сохранении временного максимального значения, а затем итерации для всех переменных:

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;
}

Спасибо @malioboro, просто и познавательно, похоже, мне предстоит долгий путь :)

Subash Gowthaman 10.09.2018 08:35

Возможно, самое простое:

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

Будет ли это наиболее эффективным или нет, зависит от качества реализации стандартной библиотеки, которую вы используете.

Мне все еще доступны стандартные библиотечные функции. Я согласен, что это наиболее эффективный способ решения проблемы. Спасибо, что поделились.

Subash Gowthaman 10.09.2018 08:36

@SubashGowthaman Стандартная библиотека и базовый язык C++ регулируются единым стандартом. Чтобы изучить C++, нужно изучить оба.

Öö Tiib 10.09.2018 10:46

Отправьте C++ 11, лучший способ - использовать нотацию список инициализаторов и написать

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

Из-за взаимодействия между стандартной библиотекой C++ и компилятором это также может оказаться самым быстрым решением.

Другие вопросы по теме