El menor de tres enteros sin operadores de comparación

Escriba un programa para encontrar el menor de tres enteros, sin utilizar ninguno de los operadores de comparación. 
Sean 3 números de entrada x, y y z.
Método 1 (Resta repetida) 
Tome una variable de contador c e inicialícela con 0. En un ciclo, reste repetidamente x, y y z en 1 e incremente c. El número que primero se convierte en 0 es el más pequeño. Después de que termine el ciclo, c contendrá el mínimo de 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

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
?>

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>

Producción: 

Minimum of 3 numbers is 5

Complejidad del tiempo: O(min(x, y, z))

Espacio Auxiliar: O(1)

Este método no funciona para números negativos. El método 2 también funciona para números negativos.
Método 2 (Usar operaciones con bits) 
Use el método 2 de esta publicación para encontrar un mínimo de dos números (no podemos usar el Método 1 ya que el Método 1 usa el operador de comparación). Una vez que tengamos la funcionalidad para encontrar un mínimo de 2 números, podemos usar esto para encontrar un mínimo de 3 números. 
 

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>

Producción: 

Minimum of 3 numbers is 5

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Método 3 (usar el operador de división) 
También podemos usar el operador de división para encontrar un mínimo de dos números. Si el valor de (a/b) es cero, entonces b es mayor que a, de lo contrario, a es mayor. Gracias a gopinath y Vignesh por sugerir este método.
 

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>

Producción: 

Minimum of 3 numbers is 68

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Escriba comentarios si encuentra que los códigos/algoritmos anteriores son incorrectos o encuentra otras formas de resolver el mismo problema.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *