# Minimize moves to make X and Y equal using given subtraction operations

• Last Updated : 06 May, 2022

Given two positive integers, X and Y, the task is to find the minimum number of operations to make X and y equal where in one operation, we can select any positive integer Z and do the following process.

• If the number Z is even, subtract Z from X.
• If the number Z is odd, add Z to X.

Examples:

Input: X = 4, Y = 7
Output: 1
Explanation:  Select Z = 3, then the new X will be 4 + 3 = 7.
Hence, it requires only one operation.

Input: X = 6, Y = 6
Output: 0
Explanation: Both of them are already the same.
Hence, it requires 0 operations.

Approach: This problem can be solved using the Greedy approach based on the following observation:

There are only three possible answers:

• First, if X = Y, no operation is required,
• Second, If X > Y and X − Y is even or X < Y and Y − X is odd, then only 1 operation is required.
• Third, if X > Y and X − Y is odd or X < Y and Y − X is even, then there is need for 2 operations. One move extra is required for turning it to the second case

Follow the below steps to solve this problem:

• Find the relation between X and Y.
• Now based on the relation find how many moves are needed based on the above observation.

Below is the implementation of the above approach :

## C++

 `// C++ code to implement the above approach`   `#include ` `using` `namespace` `std;`   `// Function to find the minimum number` `// of moves required` `int` `minMoves(``int` `X, ``int` `Y)` `{` `    ``// Checking if both 'X' and 'Y'` `    ``// are same or not.` `    ``if` `(X == Y) {` `        ``return` `0;` `    ``}`   `    ``// Checking if we can make X and Y equal` `    ``// if we select Z = X - Y` `    ``else` `if` `(X > Y && (X - Y) % 2 == 0) {` `        ``return` `1;` `    ``}`   `    ``// Checking if we can make X and Y equal` `    ``// if we select Z = Y - X` `    ``else` `if` `(X < Y && (Y - X) % 2 == 1) {` `        ``return` `1;` `    ``}` `    ``else` `{` `        ``return` `2;` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `X = 4, Y = 7;`   `    ``// Function call` `    ``cout << minMoves(X, Y);` `    ``return` `0;` `}`

## Java

 `// Java code to implement the above approach` `import` `java.util.*;` `class` `GFG` `{` `  `  `  ``// Function to find the minimum number` `  ``// of moves required` `  ``public` `static` `int` `minMoves(``int` `X, ``int` `Y)` `  ``{` `    `  `    ``// Checking if both 'X' and 'Y'` `    ``// are same or not.` `    ``if` `(X == Y) {` `      ``return` `0``;` `    ``}`   `    ``// Checking if we can make X and Y equal` `    ``// if we select Z = X - Y` `    ``else` `if` `(X > Y && (X - Y) % ``2` `== ``0``) {` `      ``return` `1``;` `    ``}`   `    ``// Checking if we can make X and Y equal` `    ``// if we select Z = Y - X` `    ``else` `if` `(X < Y && (Y - X) % ``2` `== ``1``) {` `      ``return` `1``;` `    ``}` `    ``else` `{` `      ``return` `2``;` `    ``}` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `main(String[] args)` `  ``{` `    ``int` `X = ``4``, Y = ``7``;`   `    ``// Function call` `    ``System.out.print(minMoves(X, Y));` `  ``}` `}`   `// This code is contributed by ashishsingh13122000.`

## Python3

 `# Python code to implement the above approach`   `# Function to find the minimum number` `# of moves required` `def` `minMoves(X, Y):` `  `  `    ``# Checking if both 'X' and 'Y'` `    ``# are same or not.` `    ``if` `(X ``=``=` `Y):` `        ``return` `0`   `    ``# Checking if we can make X and Y equal` `    ``# if we select Z = X - Y` `    ``elif` `(X > Y ``and` `(X ``-` `Y) ``%` `2` `=``=` `0``):` `        ``return` `1`   `    ``# Checking if we can make X and Y equal` `    ``# if we select Z = Y - X` `    ``elif` `(X < Y ``and` `(Y ``-` `X) ``%` `2` `=``=` `1``):` `        ``return` `1` `    ``else``:` `        ``return` `2`   `# Driver Code` `X, Y ``=` `4``, ``7`   `# Function call` `print``(minMoves(X, Y))`   `# This code is contributed by shinjanpatra`

## C#

 `// C# code to implement the above approach` `using` `System;`   `class` `GFG {`   `  ``// Function to find the minimum number` `  ``// of moves required` `  ``static` `int` `minMoves(``int` `X, ``int` `Y)` `  ``{`   `    ``// Checking if both 'X' and 'Y'` `    ``// are same or not.` `    ``if` `(X == Y) {` `      ``return` `0;` `    ``}`   `    ``// Checking if we can make X and Y equal` `    ``// if we select Z = X - Y` `    ``else` `if` `(X > Y && (X - Y) % 2 == 0) {` `      ``return` `1;` `    ``}`   `    ``// Checking if we can make X and Y equal` `    ``// if we select Z = Y - X` `    ``else` `if` `(X < Y && (Y - X) % 2 == 1) {` `      ``return` `1;` `    ``}` `    ``else` `{` `      ``return` `2;` `    ``}` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main()` `  ``{` `    ``int` `X = 4, Y = 7;`   `    ``// Function call` `    ``Console.Write(minMoves(X, Y));` `  ``}` `}`   `// This code is contributed by Samim Hossain Mondal.`

## Javascript

 ``

Output

`1`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :