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++
#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;
}
int main()
{
int x = 12, y = 15, z = 5;
cout << "Minimum of 3 numbers is "
<< smallest(x, y, z);
return 0;
}
|
C
#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
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));
}
}
|
Python3
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
x = 12
y = 15
z = 5
print ( "Minimum of 3 numbers is" ,
smallest(x, y, z))
|
C#
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;
}
public static void Main()
{
int x = 12, y = 15, z = 5;
Console.Write( "Minimum of 3"
+ " numbers is " + smallest(x, y, z));
}
}
|
PHP
<?php
function smallest( $x , $y , $z )
{
$c = 0;
while ( $x && $y && $z )
{
$x --; $y --; $z --; $c ++;
}
return $c ;
}
$x = 12;
$y = 15;
$z = 5;
echo "Minimum of 3 numbers is " .
smallest( $x , $y , $z );
?>
|
Javascript
<script>
function smallest(x, y, z)
{
let c = 0;
while (x && y && z) {
x--;
y--;
z--;
c++;
}
return c;
}
let x = 12, y = 15, z = 5;
document.write( "Minimum of 3 numbers is "
+ smallest(x, y, z));
</script>
|
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++
#include <bits/stdc++.h>
using namespace std;
#define CHAR_BIT 8
int min( int x, int y)
{
return y + ((x - y) & ((x - y) >> ( sizeof ( int ) * CHAR_BIT - 1)));
}
int smallest( int x, int y, int z)
{
return min(x, min(y, z));
}
int main()
{
int x = 12, y = 15, z = 5;
cout << "Minimum of 3 numbers is " << smallest(x, y, z);
return 0;
}
|
C
#include <stdio.h>
#define CHAR_BIT 8
int min( int x, int y)
{
return y + ((x - y) & ((x - y) >> ( sizeof ( int ) * CHAR_BIT - 1)));
}
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
class GFG
{
static int CHAR_BIT = 8 ;
static int min( int x, int y)
{
return y + ((x - y) & ((x - y) >>
((Integer.SIZE/ 8 ) * CHAR_BIT - 1 )));
}
static int smallest( int x, int y, int z)
{
return Math.min(x, Math.min(y, z));
}
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));
}
}
|
Python3
CHAR_BIT = 8
def min (x, y):
return y + ((x - y) & \
((x - y) >> ( 32 * CHAR_BIT - 1 )))
def smallest(x, y, z):
return min (x, min (y, z))
x = 12
y = 15
z = 5
print ( "Minimum of 3 numbers is " ,
smallest(x, y, z))
|
C#
using System;
class GFG
{
static int CHAR_BIT=8;
static int min( int x, int y)
{
return y + ((x - y) & ((x - y) >> ( sizeof ( int ) * CHAR_BIT - 1)));
}
static int smallest( int x, int y, int z)
{
return Math.Min(x, Math.Min(y, z));
}
static void Main()
{
int x = 12, y = 15, z = 5;
Console.WriteLine( "Minimum of 3 numbers is " +smallest(x, y, z));
}
}
|
Javascript
<script>
let CHAR_BIT = 8;
function min(x,y)
{
return y + ((x - y) & ((x - y) >> (32 * CHAR_BIT - 1)))
}
function smallest(x,y,z)
{
return Math.min(x, Math.min(y, z));
}
let x = 12, y = 15, z = 5;
document.write( "Minimum of 3 numbers is " +
smallest(x, y, z));
</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++
#include <bits/stdc++.h>
using namespace std;
int smallest( int x, int y, int z)
{
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;
}
|
C
#include <stdio.h>
int smallest( int x, int y, int z)
{
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
class GfG {
static int smallest( int x, int y, int z)
{
if ((y / x) != 1 )
return ((y / z) != 1 ) ? y : z;
return ((x / z) != 1 ) ? x : z;
}
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));
}
}
|
python3
def smallest(x, y, z):
if ( not (y / x)):
return y if ( not (y / z)) else z
return x if ( not (x / z)) else z
if __name__ = = "__main__" :
x = 78
y = 88
z = 68
print ( "Minimum of 3 numbers is" ,
smallest(x, y, z))
|
C#
using System;
public class GfG {
static int smallest( int x, int y, int z)
{
if ((y / x) != 1)
return ((y / z) != 1) ? y : z;
return ((x / z) != 1) ? x : z;
}
public static void Main()
{
int x = 78, y = 88, z = 68;
Console.Write( "Minimum of 3 numbers"
+ " is {0}" ,
smallest(x, y, z));
}
}
|
Javascript
<script>
function smallest(x, y, z)
{
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));
</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.