Hay varias formas de resolver el problema. Tirando de ingeniería puedes hacerte unas funciones tal que:
Código C:
Ver originalint min(int a, int b)
{
return b ^ ((a ^ b) & -(a < b));
}
int max(int a, int b)
{
return a ^ ((a ^ b) & -(a < b));
}
void sort(int* first, int* second)
{
int a = min(*first,*second);
int b = max(*first,*second);
*first = a;
*second = b;
}
Con esta función ya tienes todo lo necesario para trabajar. Sort va a dejar en el primer parámetro el número menor. Si llamas a sort con, por ejemplo, n3 y n4, n3 se quedará con el menor de los dos. Después comparas n2 y n3 y el menor se quedará en n2... Si consigues dejar el menor en, por ejemplo n1 simplemente tienes que preocuparte de calcular el promedio de n2, n3 y n4.
Un saludo