编程题(度度熊回家最短距离)
来源:互联网 发布:淘宝怎么退订短信 编辑:程序博客网 时间:2024/06/11 05:29
一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
输入描述:
输入一个正整数N, N <= 50。
接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
输出描述:
输出一个整数表示度度熊最少需要走的距离。
输入例子1:
4
1 4 -1 3
输出例子1:
4
刚开始看这个题目,没注意看好题,我以为是去掉最大的数值,看了好几遍觉题目描述不清楚,后来再认认真真的看了一遍,发现是自己理解错了。
1.先将1到n-2每个点,到相邻的两点之间的距离之和,放在arr_jj里面,arr_jj的个数为k,arr个数为n;二者数量!!关系是k=n-2;我们要去掉的就是距离最大那个点
2.在把arr_jj的值放在brr_jj里。复制一遍。直接用copyOf()方法,进行冒泡排序,其实简单点用sort()方法就可以升序
3.我们已经知道最大的值,用binarySearch()来索引出最大的值,在arr_jj里的位置;
position相当于n;当k为0时;n的值为1;位置关系就是n=k+1;
找出要去掉的最大点,接下来就好办了。
4.我们求出所有点的距离绝对值,在相加为S
5.再减去要去掉的那个点的两边距离brr_jj【0】
6.最后加上新增加的距离。下标为position-1与position+1的距离
于是就能出现结果了:
我没有规范设置输入的数组要求,也就是题目说的数组元素绝对值小于50;
package ceshi;import java.util.Arrays;import java.util.Scanner;public class huijia { public huijia(int n){ try { Scanner pen=new Scanner(System.in); int arr[]=new int[n]; for(int i=0;i<n;i++){ arr[i]=pen.nextInt(); }//输入数字 int arr_jj[]=new int[n-2];//起点和终点之间一共有n-2个点,每个元素装一个点与之相邻两个点的距离个数是:k=n-2 int qian,hou,cap; for(int i=1,k=0;i<n-1;i++,k++){ qian=arr[i]-arr[i-1]; if(qian<=0){ cap=-qian; qian=cap; } hou=arr[i+1]-arr[i]; if(hou<=0){ cap=-hou; hou=cap; } arr_jj[k]=qian+hou; System.out.println(qian+"+"+hou+"="+arr_jj[k]+" 是arr_jj中第"+k+"个 "+"这是arr中第"+i+"个点值");//这里的i=k+1的关系 }//求每个点与之相邻的两个点的距离之和 int brr_jj[]; brr_jj=Arrays.copyOf(arr_jj, arr_jj.length);//复制arr_jj给brr_jj int big; for(int i=0;i<brr_jj.length-1;i++){ for(int j=0;j<brr_jj.length-1-i;j++){ if(brr_jj[j]<brr_jj[j+1]){ big=brr_jj[j+1]; brr_jj[j+1]=brr_jj[j]; brr_jj[j]=big; } } }//将距离之和进行冒泡排序,可以得出点与之相邻的两个点的距离之和的最大值,最大值是brr_jj[0]; int position=Arrays.binarySearch(arr_jj, brr_jj[0])+1;//用brr的最大值索引出在arr_jj的位置为k,i=k+1; System.out.println("这是要去掉第"+position+"个点"+arr[position]);//arr_jj的最大值对应的点——的值(在arr的位置),这是要去掉的点。 int S=0,ss; for(int x=0;x<n-1;x++){ ss=arr[x+1]-arr[x]; if(ss<0){ ss=-ss;//将两点之间的间距化为正数 } S=S+ss;//将距离相加 } int newS; newS=arr[position+1]-arr[position-1]; if(newS<0){ newS=-newS; }//去position点之后,就增加了新了一条路线。(position+1)与(position-1) System.out.print("最短距离为:"); System.out.println(S-brr_jj[0]+newS);//距离就是:所有点之间的距离之和 - 最大距离之和 + 新增加的距离newS } catch (Exception e) { // TODO: handle exception } }}
这是主函数:
package ceshi;import java.util.Scanner;public class main_class { public static void main(String[] args) { // TODO Auto-generated method stub Scanner pen=new Scanner(System.in); int n; n=pen.nextInt(); huijia huijia=new huijia(n); }}
“`如果对你有帮助的话,给个赞呗
这个方法虽然土,没有人家几行代码来得少。但是心情很愉悦,因为我解决了问题。
其实我也只是代码小白。啊哈哈
有错误欢迎指正,我们交流交流
- 编程题(度度熊回家最短距离)
- [编程题] 度度熊回家
- [编程题] 度度熊回家
- [编程题] 度度熊回家
- 【杭电-oj】-2083-简易版之最短距离(走朋友回家,再走朋友,怎么近)
- hdu2038简易版之最短距离(水题一道)
- 最短距离
- 最短距离
- 最短距离
- 最短距离
- 简易版最短距离(H2083)
- ZOJ 1064 (最短距离 Floyed STL)
- 字符串间最短距离(动态规划)
- 简易版之最短距离(2083)
- CSU 1407: 最短距离(数学啊 )
- uva 11836(两个四面体最短距离)
- 字符串间最短距离(动态规划)
- 【杭电oj】2083 - 简易版之最短距离(最短距离)
- 2017 Multi-University Training Contest
- jQuery中的.addClass()用法
- -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable
- Springboot--定时器
- 装饰者模式及其应用
- 编程题(度度熊回家最短距离)
- angular组件
- Java基础知识之字符串
- 实现类似于阿里云的动画效果
- 创建对象的几种方式
- 我在Sublime Text 3 编辑器中常用到的插件
- Linux下部署开源版“禅道”项目管理系统
- 离线地图的c++ 结合 html实现
- IDEA 配置Tomcat,并发布项目