# Smallest of three integers without comparison operators

Last Updated : 13 Apr, 2024

Write a program to find the smallest of three integers, without using any of the comparison operators.
Let 3 input numbers be x, y and z.
Method 1 (Repeated Subtraction)
Take a counter variable c and initialize it with 0. In a loop, repeatedly subtract x, y and z by 1 and increment c. The number which becomes 0 first is the smallest. After the loop terminates, c will hold the minimum of 3.

C++ ```// C++ program to find Smallest // of three integers without // comparison operators #include <bits/stdc++.h> using namespace std; int smallest(int x, int y, int z) { int c = 0; while (x && y && z) { x--; y--; z--; c++; } return c; } // Driver Code int main() { int x = 12, y = 15, z = 5; cout << "Minimum of 3 numbers is " << smallest(x, y, z); return 0; } // This code is contributed // by Akanksha Rai ``` C ```// C program to find Smallest // of three integers without // comparison operators #include <stdio.h> int smallest(int x, int y, int z) { int c = 0; while (x && y && z) { x--; y--; z--; c++; } return c; } int main() { int x = 12, y = 15, z = 5; printf("Minimum of 3 numbers is %d", smallest(x, y, z)); return 0; } ``` Java ```// Java program to find Smallest // of three integers without // comparison operators class GFG { static int smallest(int x, int y, int z) { int c = 0; while (x != 0 && y != 0 && z != 0) { x--; y--; z--; c++; } return c; } public static void main(String[] args) { int x = 12, y = 15, z = 5; System.out.printf("Minimum of 3" + " numbers is %d", smallest(x, y, z)); } } // This code is contributed by Smitha Dinesh Semwal. ``` Python3 ```# Python3 program to find Smallest # of three integers without # comparison operators def smallest(x, y, z): c = 0 while ( x and y and z ): x = x-1 y = y-1 z = z-1 c = c + 1 return c # Driver Code x = 12 y = 15 z = 5 print("Minimum of 3 numbers is", smallest(x, y, z)) # This code is contributed by Anshika Goyal ``` C# ```// C# program to find Smallest of three // integers without comparison operators using System; class GFG { static int smallest(int x, int y, int z) { int c = 0; while (x != 0 && y != 0 && z != 0) { x--; y--; z--; c++; } return c; } // Driver Code public static void Main() { int x = 12, y = 15, z = 5; Console.Write("Minimum of 3" + " numbers is " + smallest(x, y, z)); } } // This code is contributed by Sam007 ``` Javascript ```<script> // JavaScript program to find Smallest // of three integers without // comparison operators function smallest(x, y, z) { let c = 0; while (x && y && z) { x--; y--; z--; c++; } return c; } // Driver Code let x = 12, y = 15, z = 5; document.write("Minimum of 3 numbers is " + smallest(x, y, z)); // This code is contributed by Surbhi Tyagi. </script> ``` PHP ```<?php // php program to find Smallest // of three integers without // comparison operators function smallest(\$x, \$y, \$z) { \$c = 0; while ( \$x && \$y && \$z ) { \$x--; \$y--; \$z--; \$c++; } return \$c; } // Driver code \$x = 12; \$y = 15; \$z = 5; echo "Minimum of 3 numbers is ". smallest(\$x, \$y, \$z); // This code is contributed by Sam007 ?> ```

Output:

`Minimum of 3 numbers is 5`

Time Complexity: O(min(x, y, z))

Auxiliary Space: O(1)

This method doesn’t work for negative numbers. Method 2 works for negative numbers also.
Method 2 (Use Bit Operations)
Use method 2 of this post to find minimum of two numbers (We can’t use Method 1 as Method 1 uses comparison operator). Once we have functionality to find minimum of 2 numbers, we can use this to find minimum of 3 numbers.

C++ ```// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; #define CHAR_BIT 8 /*Function to find minimum of x and y*/ int min(int x, int y) { return y + ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))); } /* Function to find minimum of 3 numbers x, y and z*/ int smallest(int x, int y, int z) { return min(x, min(y, z)); } // Driver code int main() { int x = 12, y = 15, z = 5; cout << "Minimum of 3 numbers is " << smallest(x, y, z); return 0; } // This code is contributed by Code_Mech. ``` C ```// C implementation of above approach #include <stdio.h> #define CHAR_BIT 8 /*Function to find minimum of x and y*/ int min(int x, int y) { return y + ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))); } /* Function to find minimum of 3 numbers x, y and z*/ int smallest(int x, int y, int z) { return min(x, min(y, z)); } int main() { int x = 12, y = 15, z = 5; printf("Minimum of 3 numbers is %d", smallest(x, y, z)); return 0; } ``` Java ```// Java implementation of above approach class GFG { static int CHAR_BIT = 8; // Function to find minimum of x and y static int min(int x, int y) { return y + ((x - y) & ((x - y) >> ((Integer.SIZE/8) * CHAR_BIT - 1))); } // Function to find minimum of 3 numbers x, y and z static int smallest(int x, int y, int z) { return Math.min(x, Math.min(y, z)); } // Driver code public static void main (String[] args) { int x = 12, y = 15, z = 5; System.out.println("Minimum of 3 numbers is " + smallest(x, y, z)); } } // This code is contributed by mits ``` Python3 ```# Python3 implementation of above approach CHAR_BIT = 8 # Function to find minimum of x and y def min(x, y): return y + ((x - y) & \ ((x - y) >> (32 * CHAR_BIT - 1))) # Function to find minimum # of 3 numbers x, y and z def smallest(x, y, z): return min(x, min(y, z)) # Driver code x = 12 y = 15 z = 5 print("Minimum of 3 numbers is ", smallest(x, y, z)) # This code is contributed # by Mohit Kumar ``` C# ```// C# implementation of above approach using System; class GFG { static int CHAR_BIT=8; /*Function to find minimum of x and y*/ static int min(int x, int y) { return y + ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))); } /* Function to find minimum of 3 numbers x, y and z*/ static int smallest(int x, int y, int z) { return Math.Min(x, Math.Min(y, z)); } // Driver code static void Main() { int x = 12, y = 15, z = 5; Console.WriteLine("Minimum of 3 numbers is "+smallest(x, y, z)); } } // This code is contributed by mits ``` Javascript ```<script> let CHAR_BIT = 8; // Function to find minimum of x and y function min(x,y) { return y + ((x - y) & ((x - y) >> (32 * CHAR_BIT - 1))) } // Function to find minimum of 3 numbers x, y and z function smallest(x,y,z) { return Math.min(x, Math.min(y, z)); } // Driver code let x = 12, y = 15, z = 5; document.write("Minimum of 3 numbers is " + smallest(x, y, z)); // This code is contributed by avanitrachhadiya2155 </script> ```

Output:

`Minimum of 3 numbers is 5`

Time Complexity: O(1)

Auxiliary Space: O(1)

Method 3 (Use Division operator)
We can also use division operator to find minimum of two numbers. If value of (a/b) is zero, then b is greater than a, else a is greater. Thanks to gopinath and Vignesh for suggesting this method.

C++ ```// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; // Using division operator to find // minimum of three numbers int smallest(int x, int y, int z) { if (!(y / x)) // Same as "if (y < x)" return (!(y / z)) ? y : z; return (!(x / z)) ? x : z; } int main() { int x = 78, y = 88, z = 68; cout << "Minimum of 3 numbers is " << smallest(x, y, z); return 0; } // this code is contributed by shivanisinghss2110 ``` C ```#include <stdio.h> // Using division operator to find // minimum of three numbers int smallest(int x, int y, int z) { if (!(y / x)) // Same as "if (y < x)" return (!(y / z)) ? y : z; return (!(x / z)) ? x : z; } int main() { int x = 78, y = 88, z = 68; printf("Minimum of 3 numbers is %d", smallest(x, y, z)); return 0; } ``` Java ```// Java program of above approach class GfG { // Using division operator to // find minimum of three numbers static int smallest(int x, int y, int z) { if ((y / x) != 1) // Same as "if (y < x)" return ((y / z) != 1) ? y : z; return ((x / z) != 1) ? x : z; } // Driver code public static void main(String[] args) { int x = 78, y = 88, z = 68; System.out.printf("Minimum of 3 numbers" + " is %d", smallest(x, y, z)); } } // This code has been contributed by 29AjayKumar ``` python3 ```# Using division operator to find # minimum of three numbers def smallest(x, y, z): if (not (y / x)): # Same as "if (y < x)" return y if (not (y / z)) else z return x if (not (x / z)) else z # Driver Code if __name__== "__main__": x = 78 y = 88 z = 68 print("Minimum of 3 numbers is", smallest(x, y, z)) # This code is contributed # by ChitraNayal ``` C# ```// C# program of above approach using System; public class GfG { // Using division operator to // find minimum of three numbers static int smallest(int x, int y, int z) { if ((y / x) != 1) // Same as "if (y < x)" return ((y / z) != 1) ? y : z; return ((x / z) != 1) ? x : z; } // Driver code public static void Main() { int x = 78, y = 88, z = 68; Console.Write("Minimum of 3 numbers" + " is {0}", smallest(x, y, z)); } } /* This code contributed by PrinciRaj1992 */ ``` Javascript ```<script> // Javascript implementation of above approach // Using division operator to find // minimum of three numbers function smallest(x, y, z) { if (!(y / x)) // Same as "if (y < x)" return (!(y / z)) ? y : z; return (!(x / z)) ? x : z; } let x = 78, y = 88, z = 68; document.write("Minimum of 3 numbers is " + smallest(x, y, z)); // This is code is contributed by Mayank Tyagi </script> ```

Output:

`Minimum of 3 numbers is 68`

Time Complexity: O(1)

Auxiliary Space: O(1)

Please write comments if you find the above codes/algorithms incorrect, or find other ways to solve the same problem.

Previous
Next