[編程題]走斜線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;
            }
        }
    } 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章