Open In App

Minimize value of |A – X| + |B – Y| + |C – Z| such that X * Y = Z

Improve
Improve
Like Article
Like
Save
Share
Report

Given three integers A, B, and C, the task is to find the minimum possible value of |A – X| + |B – Y| + |C – Z| such that X * Y = Z.

Example:

Input: A = 19, B = 28, C = 522
Output: 2
Explanation: The most optimal choice of X, Y, and Z for the given A, B, and C are X = 18, Y = 29, and Z = 522. The equation X * Y = Z holds true and the value of |A – X| + |B – Y| + |C – Z| = 2 which is minimum possible.

Input: A = 11, B = 11, C = 121
Output: 0
Explanation: The given values of A, B, and C satisfies A * B = C. Therefore the most optimal choice is X = A, Y = B, and Z = C.

 

Approach: The above problem can be solved using the following observations:

  • The maximum value of |A – X| + |B – Y| + |C – Z| can be A + B + C for X, Y, and Z equal to 0.
  • Based on the above observation, iterating over all the values of i * j  such that i * j <= 2 * C  and choosing the best value is the optimal choice.

Therefore, iterate over all values of i in the range [1, 2*C], and for every i, iterate over all values of j such that i * j <= 2 * C and keep track of the minimum possible value of |A – i| + |B – j| + |C –  i * j|.

Below is the implementation of the above approach:

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>


Output: 

2

 

Time Complexity: O(C*log C)
Auxiliary Space: O(1)



Last Updated : 29 Sep, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads