[编程题]走斜线Java

题目描述:

有天牛牛来到一张方格地图上,整张地图可以看做一个二维坐标轴。牛牛此刻处于原点(0,0),他想要到点(x,y)去。
牛牛有强迫症,他规定自己必须恰好k步走到点(x,y),中途可以经过任何点包括(x,y),但是第k步一定要到达(x,y)。
一步有八种走法,直线东(+1,0)南(0,-1)西(-1,0)北(0,+1),斜线东南(+1,-1)东北(+1,+1)西南(-1,-1)西北(-1,+1)。
牛牛会在能k步到达目的地的基础下尽量走斜线,你能计算出牛牛到底走了多少条斜线吗?
输入描述:
第一行一个整数T,代表数据组数。
每组数据给出三个整数x,y,k。
输出描述:
对于每组数据,单独一行输出一个整数。
如果牛牛可以在第k步的时候到达(x,y),输出牛牛走的斜线数量。
如果牛牛不能到达,输出-1。

示例1:

输入
2
2 3 4
7 7 9
输出
3
9

示例2

输入
1
1 2 1
输出
-1
备注:
对于100%的数据,1<=T<=10001<=x,y,k<=1000000000000000000

题解代码:

import java.util.Scanner;
public class Main{
    public static void main(String [] args){
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        long x,y,k;
        while(in.hasNext()){
            x = in.nextLong();
            y = in.nextLong();
            k = in.nextLong();
            System.out.println(Count(x,y,k));
        }
    }
    //计算x与y相等时候的斜线数
    public static long Count(long x,long y,long n){
        if(x==y){
            if(n<y){
                return -1;
            }else if((n-y)%2==1){
                return n-2;
            }else{
                return n;
            }
        }else if(x>y){
            return CountUnequal(x,y,n);
        }else{
            return CountUnequal(y,x,n);
        }
    }
    
    //计算x与y不等时的斜线数,且参数x大于y
    public static long CountUnequal(long x,long y,long n){
        if(n<x){
            return -1;
        }
        if((x-y)%2==1){
            return n-1;
        }else{
            if((n-y)%2==0){
                return n;
            }else{
                return n-2;
            }
        }
    } 
}
发布了88 篇原创文章 · 获赞 141 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37717494/article/details/105159093
今日推荐