阿里巴巴笔试题
题目描述:
小广附近有家盒马店,该店提供配送服务,配送范围是系统根据各项指标决策出的一个多边形,假设小广现在的位置为(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
import java.util.Arrays; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str= scan.next(); String s = str.replace(",",""); char[] b = s.toCharArray(); int[] arr = new int[2]; for(int i=0;i<b.length;i++){ arr[i] = b[i]-48; } String str2= scan.next(); String s2 = str2.replace(",",""); char[] b2 = s2.toCharArray(); int[] arr3 = new int[4]; int[] arr4 = new int[4]; for(int i=0,j=0;i<b2.length;i+=2){ arr3[j++] = b2[i]-48; } Arrays.sort(arr3); for(int i=1,j=0;i<b2.length;i+=2){ arr4[j++] = b2[i]-48; } Arrays.sort(arr4); if(arr[0]>=arr3[0]&&arr[0]<=arr3[3]&&arr[1]>=arr4[0]&&arr[1]<=arr4[3]){ System.out.println("yes,0"); } if(arr[0]>=arr3[0]&&arr[0]<=arr3[3]&&arr[1]>arr4[3]){ int y = arr[1] - arr4[3]; if(y<0){ y = -y; } System.out.println("no,"+y); } if(arr[0]>arr3[3]&&arr[1]>=arr3[0]&&arr[1]<=arr4[3]){ int x = arr[0] - arr3[3]; if(x<0){ x = -x; } System.out.println("no,"+x); } if(arr[0]>arr3[3]&&arr[1]>arr4[3]){ int x = arr[0] - arr3[3]; if(x<0){ x = -x; } int y = arr[1] - arr4[3]; if(y<0){ y = -y; } int m =x; if(m<y){ m = y; } System.out.println("no,"+m); } } }