赛码网--约会(Java实现)

题目描述
									

Bob和Alice有个约会,一大早Bob就从点(0,0)出发,前往约会地点(a,b)。Bob没有一点方向感,因此他每次都随机的向上下左右四个方向走一步。简而言之,如果Bob当前在(x,y),那么下一步他有可能到达(x+1,y), (x-1,y), (x,y+1), (x,y-1)。很显然,当他到达目的地的时候,已经很晚了,Alice早已离去。第二天,Alice质问Bob为什么放她鸽子,Bob说他昨天花了s步到达了约会地点。Alice怀疑Bob是不是说谎了。你能否帮她验证一下?

输入

输入三个整数a,b,s (-109

样例输入

5 5 11

输出

输出“Yes”,如果Bob可能用s步到达(a,b);否则输出“No”,不需要输出引号。

样例输出

No

解题思路:看到这个题目的难度为1,以为很快就能做完,没想到交上去竟然WA69。这个题目首先需要进行正负数判断,因为坐标可能为负。其次就要判断步数了,只考虑往前走,不考虑往后退的情况,x和y之和是最长的。所以拿这个跟Bob的步数比较即可。刚开始我只是单纯的比较,步数比和大。就输出yes,否则输出no,样例是过不了。。。Bob是没有方向感的,所以对Bob的步数与x+y做差,对差值进行分析。因为Bob是四个方向,所以我对4取余,如果余数为0,就证明Bob没有撒谎。但是交上去还不对。。。“0 0 2”这个样例过不了,于是改成了对2取余,就过了。只要保证差值是偶数就行了,即使走多了,也有可能走到指定地点。最后,希望Bob会用导航。。

代码:

import java.util.*;

import static java.lang.StrictMath.abs;

public class Main {
    public static void main(String[] args)  {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int s = sc.nextInt();
        if(a<0)
            a = -a;
        if(b<0)
            b = -b;
        if(a+b == s){
            System.out.println("Yes");
        }else if(a+b<s){
            if((s-a-b)%2 == 0)
                System.out.println("Yes");
            else
                System.out.println("No");
        }
        else
            System.out.println("No");
    }
}

猜你喜欢

转载自blog.csdn.net/yong_zi/article/details/81556984