题目描述:
有天牛牛来到一张方格地图上,整张地图可以看做一个二维坐标轴。牛牛此刻处于原点(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;
}
}
}
}