高桥君在一条数轴的原点,想去坐标为 X 处。
但坐标为 Y 处有墙,无法通过。
坐标为 Z 处有一把锤子,可以用它打碎墙以通过。
问:给出 X,Y,Z ,则高桥君要达成目的所需的最短移动距离是多少?如果不能到达,输出 −1 。
保证:−1000≤X,Y,Z≤1000 ,且 XYZ!=0 。X,Y,Z 互不相同且均为整数。
输入描述
一行,分别为X,Y,Z。
输出描述
如果高桥君可以到达目的地,则输出移动距离的最小值。如果不可能到达,则输出 -1
。
c++:
//好不容易才过
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,y,z;
cin>>x>>y>>z;
if ((x>0 && y>0 && z>0 && x>y && y<z) || (x<0 && y<0 && z<0 && x<y && y>z))
{
cout<<-1;
return 0;
}
if (abs(y)>abs(x) || (x>0 && y<0) || (x<0 && y>0) || (x<0 && y<0 && z<0 && z>y && y>x) || (x>0 && y>0 && z>0 && y>z && y<x) || (y==z && x>y))
{
cout<<abs(x);
return 0;
}
if ((x>0 && y>0 && z<0) || (x<0 && y<0 && z>0))
{
cout<<abs(z)*2+abs(x);
return 0;
}
else (cout<<abs(z)+abs(x-z));
}
//有一些没有用的判断