題目描述:
有天牛牛來到一張方格地圖上,整張地圖可以看做一個二維座標軸。牛牛此刻處於原點(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<=1000,1<=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;
}
}
}
}