# Middle of three using minimum comparisons

Given three distinct numbers a, b and c find the number with a value in middle.

Examples :

```Input : a = 20, b = 30, c = 40
Output : 30

Input : a = 12, n = 32, c = 11
Output : 12
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Simple Approach :

## C++

 `// CPP program to find  middle of three distinct  ` `// numbers ` `#include ` `using` `namespace` `std; ` ` `  `int` `middleOfThree(``int` `a, ``int` `b, ``int` `c) ` `{ ` `    ``// Checking for b ` `    ``if` `((a < b && b < c) || (c < b && b < a)) ` `       ``return` `b; ` ` `  `    ``// Checking for a ` `    ``else` `if` `((b < a && a < c) || (c < a && a < b)) ` `       ``return` `a; ` ` `  `    ``else` `       ``return` `c; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `a = 20, b = 30, c = 40; ` `    ``cout << middleOfThree(a, b, c); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find middle of  ` `// three distinct numbers ` `import` `java.util.*; ` ` `  `class` `Middle ` `{    ` `    ``// Function to find the middle of three number ` `    ``public` `static` `int` `middleOfThree(``int` `a, ``int` `b, ` `                                          ``int` `c) ` `    ``{ ` `        ``// Checking for b ` `        ``if` `((a < b && b < c) || (c < b && b < a)) ` `            ``return` `b; ` ` `  `        ``// Checking for a ` `        ``else` `if` `((b < a && a < c) || (c < a && a < b)) ` `        ``return` `a; ` ` `  `        ``else` `        ``return` `c; ` `    ``} ` `     `  `    ``// driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `a = ``20``, b = ``30``, c = ``40``; ` `        ``System.out.println( middleOfThree(a, b, c) ); ` `    ``} ` `} ` ` `  `// This code is contributed by rishabh_jain `

/div>

## Python3

 `# Python3 program to find middle  ` `# of three distinct numbers ` ` `  `def` `middleOfThree(a, b, c): ` `     `  `    ``# Checking for b ` `    ``if` `((a < b ``and` `b < c) ``or` `(c < b ``and` `b < a)) : ` `        ``return` `b; ` ` `  `    ``# Checking for a ` `    ``if` `((b < a ``and` `a < c) ``or` `(c < a ``and` `a < b)) : ` `        ``return` `a; ` ` `  `    ``else` `: ` `        ``return` `c ` ` `  `# Driver Code ` `a ``=` `20` `b ``=` `30` `c ``=` `40` `print``(middleOfThree(a, b, c)) ` ` `  `# This code is contributed by rishabh_jain `

## C#

 `// C# program to find middle of  ` `// three distinct numbers ` `using` `System; ` ` `  `class` `Middle ` `{  ` `    ``// Function to find the middle of three number ` `    ``public` `static` `int` `middleOfThree(``int` `a, ``int` `b, ` `                                        ``int` `c) ` `    ``{ ` `        ``// Checking for b ` `        ``if` `((a < b && b < c) || (c < b && b < a)) ` `            ``return` `b; ` ` `  `        ``// Checking for a ` `        ``else` `if` `((b < a && a < c) || (c < a && a < b)) ` `        ``return` `a; ` ` `  `        ``else` `        ``return` `c; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `a = 20, b = 30, c = 40; ` `        ``Console.WriteLine( middleOfThree(a, b, c) ); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m `

## PHP

 ` `

Output :

`30`

But approach used above is not efficient because of extra comparisons, which can be easily minimized. In case first part is false, it will execute remaining half to check the condition. This problem remains same if we are checking for a also.

Better Approach (Needs less comparison):

## C++

 `// CPP program to find middle of three distinct ` `// numbers ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find the middle of three numbers ` `int` `middleOfThree(``int` `a, ``int` `b, ``int` `c) ` `{ ` `    ``// Compare each three number to find middle  ` `    ``// number. Enter only if a > b ` `    ``if` `(a > b)  ` `    ``{ ` `        ``if` `(b > c) ` `            ``return` `b; ` `        ``else` `if` `(a > c) ` `            ``return` `c; ` `        ``else` `            ``return` `a; ` `    ``} ` `    ``else`  `    ``{ ` `        ``// Decided a is not greater than b. ` `        ``if` `(a > c) ` `            ``return` `a; ` `        ``else` `if` `(b > c) ` `            ``return` `c; ` `        ``else` `            ``return` `b; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `a = 20, b = 30, c = 40; ` `    ``cout << middleOfThree(a, b, c); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find middle of  ` `// three distinct numbers ` `import` `java.util.*; ` ` `  `class` `Middle ` `{    ` `    ``// Function to find the middle of three number ` `    ``public` `static` `int` `middleOfThree(``int` `a, ``int` `b,  ` `                                          ``int` `c) ` `    ``{ ` `        ``// Compare each three number to find  ` `        ``// middle number. Enter only if a > b ` `        ``if` `(a > b)  ` `        ``{ ` `            ``if` `(b > c) ` `                ``return` `b; ` `            ``else` `if` `(a > c) ` `                ``return` `c; ` `            ``else` `                ``return` `a; ` `        ``} ` `        ``else` `        ``{ ` `            ``// Decided a is not greater than b. ` `            ``if` `(a > c) ` `                ``return` `a; ` `            ``else` `if` `(b > c) ` `                ``return` `c; ` `            ``else` `                ``return` `b; ` `        ``} ` `    ``} ` `     `  `    ``// driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `a = ``20``, b = ``30``, c = ``40``; ` `        ``System.out.println(middleOfThree(a, b, c)); ` `    ``} ` `} ` ` `  `// This code is contributed by rishabh_jain `

## Python3

 `# Python3 program to find middle  ` `# of three distinct numbers ` ` `  `# Function to find the middle of three numbers ` `def` `middleOfThree(a, b, c) : ` `     `  `    ``# Compare each three number to find  ` `    ``# middle number. Enter only if a > b ` `    ``if` `a > b :  ` `        ``if` `(b > c): ` `            ``return` `b ` `        ``elif` `(a > c) : ` `            ``return` `c ` `        ``else` `: ` `            ``return` `a  ` `    ``else``: ` `        ``# Decided a is not greater than b. ` `        ``if` `(a > c) : ` `            ``return` `a ` `        ``elif` `(b > c) : ` `            ``return` `c ` `        ``else` `: ` `            ``return` `b ` ` `  `# Driver Code ` `a ``=` `20` `b ``=` `30` `c ``=` `40` `print``( middleOfThree(a, b, c) ) ` ` `  `# This code is contributed by rishabh_jain `

## C#

 `// C# program to find middle of  ` `// three distinct numbers ` `using` `System; ` ` `  `class` `Middle ` `{  ` `    ``// Function to find the middle of three number ` `    ``public` `static` `int` `middleOfThree(``int` `a, ``int` `b,  ` `                                            ``int` `c) ` `    ``{ ` `        ``// Compare each three number to find  ` `        ``// middle number. Enter only if a > b ` `        ``if` `(a > b)  ` `        ``{ ` `            ``if` `(b > c) ` `                ``return` `b; ` `            ``else` `if` `(a > c) ` `                ``return` `c; ` `            ``else` `                ``return` `a; ` `        ``} ` `        ``else` `        ``{ ` `            ``// Decided a is not greater than b. ` `            ``if` `(a > c) ` `                ``return` `a; ` `            ``else` `if` `(b > c) ` `                ``return` `c; ` `            ``else` `                ``return` `b; ` `        ``} ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `a = 20, b = 30, c = 40; ` `        ``Console.WriteLine(middleOfThree(a, b, c)); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m `

## PHP

 ` b ` `    ``if` `(``\$a` `> ``\$b``)  ` `    ``{ ` `        ``if` `(``\$b` `> ``\$c``) ` `            ``return` `\$b``; ` `        ``else` `if` `(``\$a` `> ``\$c``) ` `            ``return` `\$c``; ` `        ``else` `            ``return` `\$a``; ` `    ``} ` `    ``else` `    ``{ ` `         `  `        ``// Decided a is not  ` `        ``// greater than b. ` `        ``if` `(``\$a` `> ``\$c``) ` `            ``return` `\$a``; ` `        ``else` `if` `(``\$b` `> ``\$c``) ` `            ``return` `\$c``; ` `        ``else` `            ``return` `\$b``; ` `    ``} ` `} ` ` `  `    ``// Driver Code ` `    ``\$a` `= 20; ``\$b` `= 30; ` `    ``\$c` `= 40; ` `    ``echo` `middleOfThree(``\$a``, ``\$b``, ``\$c``); ` ` `  `// This code is contributed by anuj_67. ` `?> `

Output:

`30`

This approach is efficient and having less number of comparisons. Outer IF loop will only be executed if a > b otherwise, outer ELSE will be executed.
Other Efficient Approach :

## C++

 `// CPP program to find middle of three distinct  ` `// numbers ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find the middle of three number ` `int` `middleOfThree(``int` `a, ``int` `b, ``int` `c) ` `{ ` `    ``// x is positive if a is greater than b.  ` `    ``// x is negative if b is greater than a. ` `    ``int` `x = a - b; ` ` `  `    ``int` `y = b - c;  ``// Similar to x ` `    ``int` `z = a - c;  ``// Similar to x and y. ` ` `  `    ``// Checking if b is middle (x and y both ` `    ``// are positive) ` `    ``if` `(x * y > 0) ` `        ``return` `b; ` ` `  `    ``// Checking if c is middle (x and z both ` `    ``// are positive) ` `    ``else` `if` `(x * z > 0) ` `        ``return` `c; ` `    ``else` `        ``return` `a; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `a = 20, b = 30, c = 40; ` `    ``cout << middleOfThree(a, b, c); ` `    ``return` `0; ` `} `

## Java

 `//java program to find middle of three distinct  ` `// numbers ` `import` `java.util.*; ` ` `  `class` `Middle ` `{    ` `    ``// Function to find the middle of three number ` `    ``public` `static` `int` `middleOfThree(``int` `a, ``int` `b,  ` `                                          ``int` `c) ` `    ``{ ` `        ``// x is positive if a is greater than b.  ` `        ``// x is negative if b is greater than a. ` `        ``int` `x = a - b; ` ` `  `        ``int` `y = b - c; ``// Similar to x ` `        ``int` `z = a - c; ``// Similar to x and y. ` ` `  `        ``// Checking if b is middle (x and y  ` `        ``// both are positive) ` `        ``if` `(x * y > ``0``) ` `            ``return` `b; ` ` `  `        ``// Checking if c is middle (x and z  ` `        ``// both are positive) ` `        ``else` `if` `(x * z > ``0``) ` `            ``return` `c; ` `        ``else` `            ``return` `a; ` `    ``} ` `     `  `    ``// driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `a = ``20``, b = ``30``, c = ``40``; ` `        ``System.out.println( middleOfThree(a, b, c) ); ` `    ``} ` `} ` ` `  `// This code is contributed by rishabh_jain `

## Python3

 `# Python3 program to find middle  ` `# of three distinct numbers ` ` `  `# Function to find the middle of three number ` `def` `middleOfThree(a, b, c) : ` `     `  `    ``# x is positive if a is greater than b.  ` `    ``# x is negative if b is greater than a. ` `    ``x ``=` `a ``-` `b ` ` `  `    ``# Similar to x ` `    ``y ``=` `b ``-` `c ` `     `  `    ``# Similar to x and y. ` `    ``z ``=` `a ``-` `c  ` ` `  `    ``# Checking if b is middle (x and y  ` `    ``# both are positive) ` `    ``if` `x ``*` `y > ``0``: ` `        ``return` `b ` ` `  `    ``# Checking if c is middle (x and z  ` `    ``# both are positive) ` `    ``elif` `(x ``*` `z > ``0``) : ` `        ``return` `    ``else` `: ` `        ``return` `a ` ` `  `# Driver Code ` `a ``=` `20` `b ``=` `30` `c ``=` `40` `print``(middleOfThree(a, b, c)) ` ` `  `# This code is contributed by rishabh_jain `

## C#

 `//C# program to find middle of three distinct  ` `// numbers ` `using` `System; ` ` `  `class` `Middle ` `{  ` `    ``// Function to find the middle of three number ` `    ``public` `static` `int` `middleOfThree(``int` `a, ``int` `b,  ` `                                        ``int` `c) ` `    ``{ ` `        ``// x is positive if a is greater than b.  ` `        ``// x is negative if b is greater than a. ` `        ``int` `x = a - b; ` `         `  `        ``// Similar to x ` `        ``int` `y = b - c;  ` `         `  `         ``// Similar to x and y. ` `        ``int` `z = a - c; ` ` `  `        ``// Checking if b is middle (x and y  ` `        ``// both are positive) ` `        ``if` `(x * y > 0) ` `            ``return` `b; ` ` `  `        ``// Checking if c is middle (x and z  ` `        ``// both are positive) ` `        ``else` `if` `(x * z > 0) ` `            ``return` `c; ` `        ``else` `            ``return` `a; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `a = 20, b = 30, c = 40; ` `        ``Console.WriteLine( middleOfThree(a, b, c) ); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m `

## PHP

 ` 0) ` `        ``return` `\$b``; ` ` `  `    ``// Checking if c is  ` `    ``// middle (x and z both ` `    ``// are positive) ` `    ``else` `if` `(``\$x` `* ``\$z` `> 0) ` `        ``return` `\$c``; ` `    ``else` `        ``return` `\$a``; ` `} ` ` `  `    ``// Driver Code ` `    ``\$a` `= 20; ` `    ``\$b` `= 30;  ` `    ``\$c` `= 40; ` `    ``echo` `middleOfThree(``\$a``, ``\$b``, ``\$c``); ` ` `  `// This code is contributed by anuj_67. ` `?> `

Output :

`30`