Given a point (x, y), the task is to check if it is possible to reach from origin to (x, y) in exactly Z steps. From a given point (x, y) we can only moves in four direction left(x – 1, y), right(x + 1, y), up(x, y + 1) and down(x, y – 1).
Examples:
Input: x = 5, y = 5, z = 11
Output: Not Possible
Input: x = 10, y = 15, z = 25
Output: Possible
Approach:
- The shortest path from origin to (x, y), is |x|+|y|.
- So, it is clear that if Z less than |x|+|y|, then we can’t reach (x, y) from origin in exactly Z steps.
- If the number of steps is not less than |x|+|y| then, we have to check below two conditions to check if we can reach to (x, y) or not:
- If Z ? |x| + |y|, and
- If (Z – |x| + |y|)%2 is 0.
- For the second conditions in the above step, if we reach (x, y), we can take two more steps such as (x, y)–>(x, y+1)–>(x, y) to come back to the same position (x, y). And this is possible only if difference between them is even.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to check if it is possible to // reach (x, y) from origin in exactly z steps void possibleToReach( int x, int y, int z)
{ // Condition if we can't reach in Z steps
if (z < abs (x) + abs (y)
|| (z - abs (x) - abs (y)) % 2) {
cout << "Not Possible" << endl;
}
else
cout << "Possible" << endl;
} // Driver Code int main()
{ // Destination point coordinate
int x = 5, y = 5;
// Number of steps allowed
int z = 11;
// Function Call
possibleToReach(x, y, z);
return 0;
} |
Java
// Java program for the above approach class GFG{
// Function to check if it is possible // to reach (x, y) from origin in // exactly z steps static void possibleToReach( int x, int y, int z)
{ // Condition if we can't reach in Z steps
if (z < Math.abs(x) + Math.abs(y) ||
(z - Math.abs(x) - Math.abs(y)) % 2 == 1 )
{
System.out.print( "Not Possible" + "\n" );
}
else
System.out.print( "Possible" + "\n" );
} // Driver Code public static void main(String[] args)
{ // Destination point coordinate
int x = 5 , y = 5 ;
// Number of steps allowed
int z = 11 ;
// Function Call
possibleToReach(x, y, z);
} } // This code is contributed by 29AjayKumar |
Python3
# Python3 program for the above approach # Function to check if it is possible to # reach (x, y) from origin in exactly z steps def possibleToReach(x, y, z):
#Condition if we can't reach in Z steps
if (z < abs (x) + abs (y) or
(z - abs (x) - abs (y)) % 2 ):
print ( "Not Possible" )
else :
print ( "Possible" )
# Driver Code if __name__ = = '__main__' :
# Destination point coordinate
x = 5
y = 5
# Number of steps allowed
z = 11
# Function call
possibleToReach(x, y, z)
# This code is contributed by mohit kumar 29 |
C#
// C# program for the above approach using System;
class GFG{
// Function to check if it is possible // to reach (x, y) from origin in // exactly z steps static void possibleToReach( int x, int y, int z)
{ // Condition if we can't reach in Z steps
if (z < Math.Abs(x) + Math.Abs(y) ||
(z - Math.Abs(x) - Math.Abs(y)) % 2 == 1)
{
Console.Write( "Not Possible" + "\n" );
}
else
Console.Write( "Possible" + "\n" );
} // Driver Code public static void Main(String[] args)
{ // Destination point coordinate
int x = 5, y = 5;
// Number of steps allowed
int z = 11;
// Function Call
possibleToReach(x, y, z);
} } // This code is contributed by 29AjayKumar |
Javascript
<script> // javascript program for the above approach // Function to check if it is possible // to reach (x, y) from origin in // exactly z steps function possibleToReach(x , y , z)
{ // Condition if we can't reach in Z steps
if (z < Math.abs(x) + Math.abs(y) ||
(z - Math.abs(x) - Math.abs(y)) % 2 == 1)
{
document.write( "Not Possible" + "\n" );
}
else
document.write( "Possible" + "\n" );
} // Driver Code // Destination point coordinate var x = 5, y = 5;
// Number of steps allowed var z = 11;
// Function Call possibleToReach(x, y, z); // This code is contributed by Amit Katiyar </script> |
Output:
Not Possible
Time Complexity: O(1)
Auxiliary Space: O(1)
Recommended Articles