如果我们只能编辑函数的主体,那么找到最多四个数字的最快方法是什么?

问题描述 投票:-2回答:4

我是新来的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;
}

当我们逐个获得输入时,我们可以有效地检查,但在这种情况下,我们不能触摸主块而只触及功能块。我解决的方式似乎太多了。有没有更快的方法来解决这个问题?

c++
4个回答
2
投票

你可以使用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;
}

2
投票

最简单的可能是:

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

如果它也是最有效的,则取决于您使用的标准库的实现质量。


1
投票

不确定更快,但这是一个更简单的实现。

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

0
投票

在C ++ 11之后,最好的方法是使用初始化列表表示法并写入

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

由于C ++标准库和编译器之间的交互,这可能最终成为最快的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.