给定一个点 (x, y)。找出是否有可能以恰好 n 步从 (0, 0) 移动到 (x, y)。 4 种类型的步骤是有效的,您可以从 (a, b) 点移动到 (a, b+1)、(a, b-1)、(a-1, b)、(a+1, b)
例子:
Input: x = 0, y = 0, n = 2
Output: POSSIBLE
Input: x = 1, y = 1, n = 3
Output: IMPOSSIBLE
方法:
In the shortest path, one can move from (0, 0) to (x, y) in |x| + |y|. So, it is not possible to move from (0, 0) to (x, y) in less than |x| + |y| steps. After reaching one can take two more steps as (x, y) -> (x, y+1) -> (x, y).
所以,如果
n >= |x| + |y| and ( n-( |x| + |y| ) ) % 2 = 0.
下面是上述方法的实现:
C++
// CPP program to check whether it is possible
// or not to move from (0, 0) to (x, y)
// in exactly n steps
#include
using namespace std;
// Function to check whether it is possible
// or not to move from (0, 0) to (x, y)
// in exactly n steps
bool Arrive(int a, int b, int n)
{
if (n >= abs(a) + abs(b) and (n - (abs(a) + abs(b))) % 2 == 0)
return true;
return false;
}
// Driver code
int main()
{
int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to check whether it is possible
// or not to move from (0, 0) to (x, y)
// in exactly n steps
import java.io.*;
public class GFG {
// Function to check whether it is possible
// or not to move from (0, 0) to (x, y)
// in exactly n steps
static boolean Arrive(int a, int b, int n)
{
if (n >= Math.abs(a) + Math.abs(b) && (n - (Math.abs(a) + Math.abs(b))) % 2 == 0)
return true;
return false;
}
// Driver code
int main()
{
return 0;
}
public static void main (String[] args) {
int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
System.out.println( "Yes");
else
System.out.println( "No");
}
}
//This code is contributed by shs..
Python3
# Python3 program to check whether
# it is possible or not to move from
# (0, 0) to (x, y) in exactly n steps
# Function to check whether it is
# possible or not to move from
# (0, 0) to (x, y) in exactly n steps
def Arrive(a, b, n):
if (n >= abs(a) + abs(b) and
(n - (abs(a) + abs(b))) % 2 == 0):
return True
return False
# Driver code
a = 5
b = 5
n = 11
if (Arrive(a, b, n)):
print("Yes")
else:
print("No")
# This code is contributed
# by Yatin Gupta
C#
// C# program to check whether
// it is possible or not to
// move from (0, 0) to (x, y)
// in exactly n steps
using System;
class GFG
{
// Function to check whether it
// is possible or not to move
// from (0, 0) to (x, y) in
// exactly n steps
static bool Arrive(int a, int b, int n)
{
if (n >= Math.Abs(a) + Math.Abs(b) &&
(n - (Math.Abs(a) + Math.Abs(b))) % 2 == 0)
return true;
return false;
}
// Driver code
public static void Main ()
{
int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
Console.WriteLine( "Yes");
else
Console.WriteLine( "No");
}
}
// This code is contributed by shashank
PHP
= abs($a) + abs($b) and
($n - (abs($a) + abs($b))) % 2 == 0)
return true;
return false;
}
// Driver code
$a = 5; $b = 5; $n = 11;
if (Arrive($a, $b, $n))
echo "Yes";
else
echo "No";
// This code is contributed
// by Akanksha Rai(Abby_akku)
Javascript
输出:
No