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++ 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 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. |
# 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# 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 |
<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>
|
2
Time Complexity: O(C*log C)
Auxiliary Space: O(1)