ali 笔试模拟题

题目描述:

小广附近有家盒马店,该店提供配送服务,配送范围是系统根据各项指标决策出的一个多边形,假设小广现在的位置为(x,y),请问小广是否在该盒马店的配送范围内,如果不在配送范围内请问他要最少要走多少距离才能到盒马店配送范围内。假设坐标点在二维平面上,不考虑地球曲率等因素。

 

输入:

x,y(代表小广所在的位置,x表示横坐标,y表示纵坐标)

x1,y1,x2,y2,x3,y3....xn,yn(代表该盒马店的配送范围多边形,其中x表示横坐标,y表示纵坐标,xi和yi代表多边形一个点,点与点按顺序相连形成边,并且最后一个点(xn,yn)与第一个点(x1,y1)相连)

输出:

请问小广是否在盒马店的配送范围内,如果不在配送范围内请问他要最少走多少距离才能到盒马店配送范围内,输出结果为整数(四舍五入)

 

举例说明:

输入:

1,1
0,0,0,2,2,2,2,0

输出:

yes,0

 

输入:

2,2
0,0,0,2,2,2,2,0

输出:

yes,0

 

输入:

3,0
0,0,0,2,2,2,2,0

输出:

no,1

 

输入:

3,4
0,0,0,2,2,2,2,0

输出:

no,2

通过30%。哈哈哈

import java.util.*;
import java.util.List;
public class Main {
/** 请完成下面这个函数,实现题目要求的功能 **/
    /**
     * 当然,你也可以不按照这个模板来作答,完全按照自己的想法来
     **/
    public static String measureDistance(List<Double> xList, List<Double> yList, double x, double y) {
        if(xList==null||yList==null||xList.size()==0||yList.size()==0)
            return "error";
        Collections.sort(xList);
        Collections.sort(yList);
        double xmin = xList.get(0);
        double xmax = xList.get(xList.size()-1);
        double ymin = yList.get(0);
        double ymax = yList.get(xList.size()-1);
        if(x<=xmax&&x>=xmin&&y>=ymin&&y<=ymax)
            return "yes,0";
        else
            return "no";

    }


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();
        //(x,y)为小广所在的位置
        double x = Double.parseDouble(line.split(",")[0]);
        double y = Double.parseDouble(line.split(",")[1]);

        line = in.nextLine();
        //xList记录了多边形n个点的x坐标,yList记录了多边形n个点的y坐标
        List<Double> xList = new ArrayList<>();
        List<Double> yList = new ArrayList<>();
        String[] array = line.split(",");
        for(int i = 0; i < array.length; i++) {
            xList.add(Double.parseDouble(array[i]));
            yList.add(Double.parseDouble(array[i+1]));
            i++;
        }
        in.close();
        System.out.println(measureDistance(xList, yList, x, y));
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值