货仓选址
Posted 想变兔子的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了货仓选址相关的知识,希望对你有一定的参考价值。
题目描述
在一条数轴上有 N 家商店,它们的坐标分别为 A1~AN。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
输入格式
第一行输入整数N。
第二行N个整数A1~AN。
输出格式
输出一个整数,表示距离之和的最小值。
数据范围
1≤N≤100000
0≤Ai≤40000
输入样例:
4
6 2 9 1
1
2
输入样例:
12
在数比较小 的时候还可以正常运行,但当数变的打的时候 不能运行。而且很多东西都十分复杂,写的不够精简。在看了别人的代码后,学习到了很多新的知识点。
知识点1:Arrays.sort(a)可以将数组排序,除此之外,还有冒泡排序,选择排序等等。而我复杂的将一个数组排序到另外一个数组,可能期间还会出现问题。
知识点2
<<,>>,>>>为java中的移位运算符。
- <<表示左移运算符
例如8<<2,表示将8向左移2位,结果为32。低位补0。
二进制演算:
8的二进制:1 0 0 0
向左移动两位结果为1 0 0 0 0 0,换算成十进制即为32,也可以简单的理解为,左移就是将数变大,相当于8*2^2=32。
左移运算符的运算规律:将左边的数按照右边的数往左移动几位。 - ”>>”表示右移运算符
例如 8>>2,表示将8向右移动2位,结果为2。高位补0。
二进制演算:
8的二进制:1 0 0 0
向右移动两位:0 0 1 0即为2,也可以简单的理解为将数向右移位就是将数变小,相当于8除以2^2=2。
右移运算符运算规律:将左边的数按照右边的数右移几位。
知识点3:for(元素类型t 元素变量x : 遍历对象obj);
知识点4:math.abs()计算括号中的绝对值。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner a=new Scanner(System.in); int N=a.nextInt(); int[] num=new int[N]; int[] num2=new int[N]; for(int i=0;i<N;i++) { num[i]=a.nextInt(); } int m=-1;int min =40000; for(int w=0;w<N;w++) { for (int s=0;s<N;s++) { if(m<num[s]&&num[s]<=min) { min=num[s]; } } num2[w]=min; m=min; min=40000; } int sum=0; for(int v=1;v<=N/2;v++) { int sum1=num2[N-v]-num2[v-1]; sum=sum+sum1; } System.out.println(sum); } }
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; ++ i) { a[i] = cin.nextInt(); } Arrays.sort(a); int ans = 0; int pos = a[n >> 1]; for (int x : a) { ans += Math.abs(pos - x); } System.out.println(ans); } } ———————————————— 版权声明:本文为CSDN博主「小菜菜不会写代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/xiaoxiao66668/article/details/112591714
以上是关于货仓选址的主要内容,如果未能解决你的问题,请参考以下文章