题目:
思路:
根据中位数定理得
在数轴上求货仓到这些商店的距离之和最小<=>求这些商店所在的点的中位数到各个商店的距离之和最小<=>求a[1]到a[n]的中位数到a[1]、a[2]、a[3]······a[n]的距离之和最小;我们只要考虑n的奇偶性就好,如果n为偶数,中间那两个数都可(建议取右边,写代码好写);若是奇数,则取最中间那个;字不多写,上代码!
代码:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[100005];
int ans,sum;//ans用来记录中位数,sum记录距离之和
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);//从小到大排序,便于找中位数,sort在algorithm头文件里面
ans=n/2+1;//计算中位数;n为偶数取右边那个,n为奇数取最中间的
for(int j=1;j<=n;j++){
sum+=fabs(a[ans]-a[j]);//计算距离之和,fabs是表示取绝对值,在cmath头文件里
}
cout<<sum;
return 0;
}