C/C++

Программирование на С++. Напишите мой код с использованием подпрограммы

С клавиатуры вводятся четыре целочисленных числа a, b, с, d. Найти максимальное среди них. Запрещается написание функции, параметрами которой являются все четыре введённых числа.

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

int main()
{
//объявление переменных
long long a, b, c, d;
cout <<"Введите числа" << endl << "a b c d: ";
//ввод чисел
cin >> a >> b >> c >> d;
//сравнение и вывод максимального числа
cout <<"Максимальное число: "<< max(a, max(b, max(c, d)));
}
D.e.t ...
D.e.t ...
58
Не понял, а как передавать тогда? Массивом? Типа того?
 long long max(long long *ns) {
return max(ns[0], max(ns[1], max(ns[2], ns[3])));
}
Или там нужно рассчитывать на переменную длину?
 long long max(long long *ns, int count) {
if (count < 1) return LLONG_MIN;
long long m = ns[0];
for (int i = 1; i < count; i++) {
if (ns[i] > m) m = ns[i];
}
return m;
}
Или можно рекурсивно:
 long long max(long long *ns, int count) {
return count < 1 ? LLONG_MIN : max(ns + 1, count - 1, ns[0]);
}

long long max(long long *ns, int count, long long m) {
return count < 1 ? LLONG_MIN : max(ns + 1, count - 1, max(m, ns[0]));
}
Не знаю, современный сиплюхплюх умеет в хвостовые оптимизации или нет, но при размере учебных массивов это, наверное, неважно.

Ещё можно побороть глубину рекурсии, делая два вызова для половинок массива. Кстати, такой вариант ещё и лучше параллелится.
 long long max(long long *ns, int count) {
if (count < 1) return LLONG_MIN;
if (count == 1) return ns[0];
if (count == 2) return max(ns[0], ns[1]);
return max(max(ns, count / 2), max(ns + count / 2, count - count / 2));
}
Здесь глубина рекурсии log2(N) вместо N, как в предыдущем примере.

Вызывается всё это примерно так:
 long long *numbers = new long long[] { a, b, c, d };
cout
Александр Тимошик
Александр Тимошик
54 053
Лучший ответ
D.e.t ... Ну, если не сложно, то напишите программу, которая будет призывать функцию max
D.e.t ... А как вызвать эту функцию в основной программе ? Можете написать код полностью ? Пожалуйста!
D.e.t ... Первая ваша программа больше подходит
Александр Тимошик
 new long long[4] 
т.е. :)
D.e.t ... Спасибо, я разобрался, но скажите, что вы делаете во втором коде ? Что такое count?
 #include  
using namespace std;
int imax(int number) {
static int value = numeric_limits::min();
if (value < number) value = number;
return value;
}
int main() {
cout > a >> b >> c >> d;;
mx = imax(a);
mx = imax(b);
mx = imax(c);
mx = imax(d);
cout
Телепатически вводятся 4 значения.
Методом уринотерапии вычислить максимальное из них...