# Find maximum, minimum of three numbers without using conditional statements

Given three integers, find maximum and minimum number between them without using conditional statements or ternary operator.

#### Approach 1: (Using short-circuiting in Boolean expressions)

The idea is to take advantage of short-circuiting in Boolean expressions. We know that in Boolean AND operation such as `x && y`, y is evaluated only if x is true. If x is false, then y is not evaluated, because the whole expression would be false which can be deduced without even evaluating y. This is called short-circuiting in Boolean expressions.

The idea is to apply this principle to the below code. Initially max is a. Now if `(max < b)` is true, then that means, b is greater than a so the second sub-expression `(max = b)` is evaluated and max is set to b. If however `(max < b)` is false, then second sub-expression will not be evaluated and max will remain a (which is greater than b). In a similar fashion, the second expression is evaluated.

We can implement minimum function as well in similar fashion.

#### Approach 3: (Approach 2 Simplified)

We can simplify approach 2 by breaking the problem into finding maximum/minimum of two numbers.

We can implement minimum function as well in similar fashion.

#### Approach 4: (Using repeated subtraction)

Please use ideone or C++ Shell or any other online compiler link to post code in comments.
Like us? Please spread the word and help us grow. Happy coding :)

Get great deals at Amazon

```#include <iostream> using std::cout; using std::endl;```
``` template<typename T0, typename T1> auto max(T0 a, T1 b) { return 1./2. * (a + b + abs(a - b)); } template<typename T0, typename T1, typename T2> auto max3(T0 a, T1 b, T2 c) { return max(a, max(b, c)); } int main() { cout << "max(2.001, 2): " << max(2.001, 2) << endl; cout << "max(2, 1): " << max(2, 1) << endl; cout << "max(2, 2): " << max(2, 2) << endl; cout << "max(0, 0): " << max(0, 0) << endl; cout << "max(-1, -10): " << max(-1, -10) << endl; cout << "max(-1, 0): " << max(-1, 0) << endl; cout << "max(1, -10): " << max(1, -10) << endl; ```
``` cout << "max3(2.001, 2, 4): " << max3(2.001, 2, 4) << endl; cout << "max3(2, 1, 0): " << max3(2, 1, 0) << endl; cout << "max3(2, 2, -1): " << max3(2, 2, -1) << endl; cout << "max3(0, 0, 0): " << max3(0, 0, 0) << endl; cout << "max3(-1, -10, -3): " << max3(-1, -10, -3) << endl; cout << "max3(-1, 0, 10): " << max3(-1, 0, 10) << endl; cout << "max3(1, -10, -2): " << max3(1, -10, -2) << endl; }```