锤子<hammer>

高桥君在一条数轴的原点,想去坐标为 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));
}

//有一些没有用的判断

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值