Функция max с 3 аргументами С++
Итак, есть задача в которой попадается функция max с 3 аргументами, но у стандартной функции max может существовать всего 2 аргумента, и действительно при попытке ввести третий аргумент выбивает ошибку C2064 результатом вычисления фрагмента не является функция, принимающая 2 аргументов
Источник: https://en.cppreference.com/w/cpp/algorithm/max
Что можно было бы сделать в таком случае, и насколько мое решение верно?
Условие задачи:
Мое решение:
#include<iostream>
#include<algorithm>
using namespace std;
double max3(double a1, const double b1, const double c1)
{
return a1 > b1 ? a1 > c1 ? a1 : c1 : b1 > c1 ? b1 : c1; // max3 = max(a + b * c, 1., 15.)
}
double maximum(double a, double b, double c, double max3)
{
return (max(a, a + b) + max(a, b + c)) / (1 + max3);
}
int main()
{
double a, b, c;
const double b1 = 1.;
const double c1 = 15.;
cin >> a >> b >> c;
double a1 = a + b * c;
cout << "Answer: " << maximum(a, b, c,max3(a1, b1, c1));
}
Ответы (3 шт):
double max3(const double a1, const double b1, const double c1)
{
return max(max(a1, b1), c1);
}
Максимум от n переменных - это максимум от переменной и остальных n-1 переменных.
double max3(double a1, double b1, double c1)
{
return max(max(a1,b1),c1)
}
Да, и const тут совсем ни к чему - при передаче по значению.
P.S. Пока тыкал в капчу и искал автобусы, светофоры и переходы, меня опередили.
Начиная с C++11, std::max понимает initializer_list из любого количества аргументов, что позволяет избавиться от велосипедов
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
double a = 33;
double b = -2;
const double c = 12;
cout << max({a,b,c}) << endl;
return 0;
}
