Check if N and M can be made equal by increasing N by A and decreasing M by B
Given four numbers
M
,
N
,
A
and
B
, the task is to check whether
M
and
N
can be made equal to each other by doing any of the below operations:
- M can be increased by A and N can be decreased by B
- Leave both of them as it is.
Examples:
Input: M = 2, N = 8, A = 3, B = 3 Output: Yes Explanation: After first Operation: M can be increased by A. Therefore, M = 2 + 3 = 5 N can be decreased by B. Therefore, N = 8 – 3 = 5 Finally, M = N = 5. Input: M = 6, N = 4, A = 2, B = 1 Output: No
Approach:
On careful observation, it can be observed that since we are increasing M and decreasing N, they can be made equal only when M is less than N. Therefore when M is less than N, there are two cases at each step:
- M can be increased by A and N can be decreased by B.
- Leave both of them as it is.
Another observation which can be made is that when
M
is increased and
N
is decreased, the absolute distance between
M
and
N
is reduced by the factor of
A + B
. For example:
Let M = 2, N = 14, A = 3 and B = 3.
- In step 1, M = 5 and N = 11. The absolute distance between M and N got reduced by 6. That is, initially, the absolute distance was 12(14 – 2). After performing the given step, the absolute distance became 6(11 – 5).
- In step 2, M = 8 and N = 8. The absolute distance between M and N again got reduced by 6 thereby making M and N equal.
From the above example, we can come to the conclusion that this problem can be solved in a constant time only by checking if the absolute distance between
M
and
N
is a multiple of
(A + B)
or not.
- If it is a multiple, then M and N can be made equal.
- Else, they cannot be made equal.
Below is the implementation of the above approach:
C++
// C++ program to check if two numbers // can be made equal by increasing // the first by a and decreasing // the second by b #include <bits/stdc++.h> using namespace std; // Function to whether the numbers // can be made equal or not bool checkEqualNo( int m, int n, int a, int b) { if (m <= n) { // Check whether the numbers can reach // an equal point or not if ((n - m) % (a + b) == 0) { return true ; } else { return false ; } } else { // M and N cannot be made equal by // increasing M and decreasing N when // M is already greater than N return false ; } } // Driver code int main() { int M = 2, N = 8; int A = 3, B = 3; if (checkEqualNo(M, N, A, B)) cout << "Yes" << endl; else cout << "No" << endl; return 0; } |
Java
// Java program to check if two numbers // can be made equal by increasing // the first by a and decreasing // the second by b class GFG { // Function to whether the numbers // can be made equal or not static boolean checkEqualNo( int m, int n, int a, int b) { if (m <= n) { // Check whether the numbers can reach // an equal point or not if ((n - m) % (a + b) == 0 ) { return true ; } else { return false ; } } else { // M and N cannot be made equal by // increasing M and decreasing N when // M is already greater than N return false ; } } // Driver code public static void main (String[] args) { int M = 2 , N = 8 ; int A = 3 , B = 3 ; if (checkEqualNo(M, N, A, B) == true ) System.out.println( "Yes" ); else System.out.println( "No" ); } } // This code is contributed by Yash_R |
Python3
# Python3 program to check if two numbers # can be made equal by increasing # the first by a and decreasing # the second by b # Function to whether the numbers # can be made equal or not def checkEqualNo(m, n, a, b) : if (m < = n) : # Check whether the numbers can reach # an equal point or not if ((n - m) % (a + b) = = 0 ) : return True ; else : return False ; else : # M and N cannot be made equal by # increasing M and decreasing N when # M is already greater than N return False ; # Driver code if __name__ = = "__main__" : M = 2 ; N = 8 ; A = 3 ; B = 3 ; if (checkEqualNo(M, N, A, B)) : print ( "Yes" ); else : print ( "No" ); # This code is contributed by Yash_R |
C#
// C# program to check if two numbers // can be made equal by increasing // the first by a and decreasing // the second by b using System; class GFG { // Function to whether the numbers // can be made equal or not static bool checkEqualNo( int m, int n, int a, int b) { if (m <= n) { // Check whether the numbers can reach // an equal point or not if ((n - m) % (a + b) == 0) { return true ; } else { return false ; } } else { // M and N cannot be made equal by // increasing M and decreasing N when // M is already greater than N return false ; } } // Driver code public static void Main (String[] args) { int M = 2; int N = 8; int A = 3; int B = 3; if (checkEqualNo(M, N, A, B) == true ) Console.WriteLine( "Yes" ); else Console.WriteLine( "No" ); } } // This code is contributed by Yash_R |
Javascript
// Function to whether the numbers // can be made equal or not function checkEqualNo(m, n, a, b) { if (m <= n) { // Check whether the numbers can reach // an equal point or not if ((n - m) % (a + b) === 0) { return true ; } else { return false ; } } else { // M and N cannot be made equal by // increasing M and decreasing N when // M is already greater than N return false ; } } // Driver code function main() { const M = 2; const N = 8; const A = 3; const B = 3; if (checkEqualNo(M, N, A, B)) { console.log( "Yes" ); } else { console.log( "No" ); } } main(); |
Yes
Contact Us