时间限制:1秒
空间限制:32768K
一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
输入描述:
输入一个正整数N, N <= 50。
接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
输出描述:
输出一个整数表示度度熊最少需要走的距离。
输入例子1:
4
1 4 -1 3
输出例子1:
4 解题思路: 题目说法有些不准确,其实就是第一个点为当前位置,最后一个点为家, 需要依次走过这些点回家,可以跳过中间某一个点,求至少距离。 先求出走过所有的点的距离的总和 再求出跳过某个点后跳过的最大距离 最后用总和减去跳过最大距离 就是跳过某个点后 至少走的最短距离 跳过某个点的距离为: |前一个点-这个点| +|这个点-后一个点|-|前一个点-后一个点| //关键就是需要减去 前一个点到后一个点的距离 才是跳过这个点的距离 java源代码:import java.util.*; public class MinDistanceGoHome{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int count =sc.nextInt(); int sumD=0;//记录所有点都走之后的总距离 int []d =new int[count]; d[0]=sc.nextInt(); for(int i=1;i<count;i++){ d[i]=sc.nextInt(); sumD+=Math.abs(d[i]-d[i-1]);//求和 } //找出跳过某个点后 跳过的最大距离 int maxSuff=0; for(int i=1;i<count-1;i++){ //跳过某一个点 所跳过的距离为 |前一个点-这个点| +|这个点-后一个点|-|前一个点-后一个点| //关键就是需要减去 前一个点到后一个点的距离 才是跳过这个点的距离 int distance =Math.abs(d[i]-d[i-1])+Math.abs(d[i]-d[i+1])-Math.abs(d[i-1]-d[i+1]); if(distance>maxSuff) maxSuff=distance; } System.out.println(sumD-maxSuff); } }