Minimizar el valor de |A – X| + |B – Y| + |C – Z| tal que X * Y = Z

Dados tres enteros A , B y C , la tarea es encontrar el valor mínimo posible de |A – X| + |B – Y| + |C – Z| tal que X * Y = Z .

Ejemplo :

Entrada: A = 19, B = 28, C = 522
Salida: 2
Explicación: La elección más óptima de X, Y y Z para los A, B y C dados son X = 18, Y = 29 y Z = 522. La ecuación X * Y = Z se cumple y el valor de |A – X| + |B – Y| + |C – Z| = 2 que es el mínimo posible.

Entrada: A = 11, B = 11, C = 121
Salida: 0
Explicación: Los valores dados de A, B y C satisfacen A * B = C. Por lo tanto, la opción más óptima es X = A, Y = B y Z = C.

 

Enfoque: El problema anterior se puede resolver utilizando las siguientes observaciones:

  • El valor máximo de |A – X| + |B – Y| + |C – Z| puede ser A + B + C para X , Y y Z igual a 0 .
  • Con base en la observación anterior, iterar sobre todos los valores de i * j de  modo que i * j <= 2 * C  y elegir el mejor valor es la opción óptima.

Por lo tanto, itere sobre todos los valores de i en el rango [1, 2*C] , y para cada i , itere sobre todos los valores de j tales que i * j <= 2 * C y realice un seguimiento del valor mínimo posible de | A – yo| + |B – j| + |C – yo * j| .

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum possible
// value of |A - X| + |B - Y| + |C - Z|
// such that X * Y = Z for given A, B and C
int minimizeCost(int A, int B, int C)
{
    // Stores the minimum value of
    // |A - X| + |B - Y| + |C - Z|
    // such that X * Y = Z
    int ans = A + B + C;
 
    // Iterate over all values of i
    // in the range [1, 2*C]
    for (int i = 1; i <= 2 * C; i++) {
        int j = 0;
 
        // Iterate over all values of
        // j such that i*j <= 2*c
        while (i * j <= 2 * C) {
 
            // Update the value of ans
            ans = min(ans, abs(A - i) + abs(B - j)
                               + abs(i * j - C));
            j++;
        }
    }
 
    // Return answer
    return ans;
}
 
// Driver Code
int main()
{
    int A = 19, B = 28, C = 522;
    cout << minimizeCost(A, B, C);
 
    return 0;
}

Java

// Java program for the above approach
 
class GFG{
 
// Function to find the minimum possible
// value of |A - X| + |B - Y| + |C - Z|
// such that X * Y = Z for given A, B and C
public static int minimizeCost(int A, int B, int C)
{
    // Stores the minimum value of
    // |A - X| + |B - Y| + |C - Z|
    // such that X * Y = Z
    int ans = A + B + C;
 
    // Iterate over all values of i
    // in the range [1, 2*C]
    for (int i = 1; i <= 2 * C; i++) {
        int j = 0;
 
        // Iterate over all values of
        // j such that i*j <= 2*c
        while (i * j <= 2 * C) {
 
            // Update the value of ans
            ans = Math.min(ans, Math.abs(A - i) + Math.abs(B - j)
                               + Math.abs(i * j - C));
            j++;
        }
    }
 
    // Return answer
    return ans;
}
 
// Driver Code
public static void main(String args[])
{
    int A = 19, B = 28, C = 522;
    System.out.print(minimizeCost(A, B, C));
 
}
 
}
 
// This code is contributed by gfgking.

Python3

# Python Program to implement
# the above approach
 
# Function to find the minimum possible
# value of |A - X| + |B - Y| + |C - Z|
# such that X * Y = Z for given A, B and C
def minimizeCost(A, B, C):
 
    # Stores the minimum value of
    # |A - X| + |B - Y| + |C - Z|
    # such that X * Y = Z
    ans = A + B + C
 
    # Iterate over all values of i
    # in the range [1, 2*C]
    for i in range(1, 2 * C + 1):
        j = 0
 
        # Iterate over all values of
        # j such that i*j <= 2*c
        while (i * j <= 2 * C):
 
            # Update the value of ans
            ans = min(ans, abs(A - i) + abs(B - j) + abs(i * j - C))
            j += 1
     
 
    # Return answer
    return ans
 
 
# Driver Code
A = 19
B = 28
C = 522
print(minimizeCost(A, B, C))
 
# This code is contributed by Saurabh Jaiswal

C#

// C# program for the above approach
using System;
class GFG{
 
// Function to find the minimum possible
// value of |A - X| + |B - Y| + |C - Z|
// such that X * Y = Z for given A, B and C
public static int minimizeCost(int A, int B, int C)
{
   
    // Stores the minimum value of
    // |A - X| + |B - Y| + |C - Z|
    // such that X * Y = Z
    int ans = A + B + C;
 
    // Iterate over all values of i
    // in the range [1, 2*C]
    for (int i = 1; i <= 2 * C; i++) {
        int j = 0;
 
        // Iterate over all values of
        // j such that i*j <= 2*c
        while (i * j <= 2 * C) {
 
            // Update the value of ans
            ans = Math.Min(ans, Math.Abs(A - i) + Math.Abs(B - j)
                               + Math.Abs(i * j - C));
            j++;
        }
    }
 
    // Return answer
    return ans;
}
 
// Driver Code
public static void Main(String []args)
{
    int A = 19, B = 28, C = 522;
    Console.Write(minimizeCost(A, B, C));
}
}
 
// This code is contributed by shivanisinghss2110

Javascript

<script>
        // JavaScript Program to implement
        // the above approach
 
        // Function to find the minimum possible
        // value of |A - X| + |B - Y| + |C - Z|
        // such that X * Y = Z for given A, B and C
        function minimizeCost(A, B, C)
        {
         
            // Stores the minimum value of
            // |A - X| + |B - Y| + |C - Z|
            // such that X * Y = Z
            let ans = A + B + C;
 
            // Iterate over all values of i
            // in the range [1, 2*C]
            for (let i = 1; i <= 2 * C; i++) {
                let j = 0;
 
                // Iterate over all values of
                // j such that i*j <= 2*c
                while (i * j <= 2 * C) {
 
                    // Update the value of ans
                    ans = Math.min(ans, Math.abs(A - i) + Math.abs(B - j)
                        + Math.abs(i * j - C));
                    j++;
                }
            }
 
            // Return answer
            return ans;
        }
 
        // Driver Code
        let A = 19, B = 28, C = 522;
        document.write(minimizeCost(A, B, C));
 
     // This code is contributed by Potta Lokesh
    </script>
Producción: 

2

 

Complejidad temporal: O(C*log C)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por kartikmodi 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 *