//
问题 F: 兔子
时间限制: 1.000 Sec 内存限制: 128 MB
题目描述
从左往右有100000001个整数点,分别是整数点0至整数点100000000。有n只兔子,第i只兔子在整数点d[i]。你需要选择一个整数点作为喂食点,所有兔子都要走到这个整数点进食。应该如何选择喂食点,才能使得所有兔子走过的总路程最小?输出最小的总路程。
输入
第一行,一个整数。1<=n<=20。
第二行,共n个整数,第i个整数是d[i]。0<=d[i]<=100000000。
输出
一个整数
样例输入 Copy
【样例1】
3
5 9 1
【样例2】
4
5 9 1 8
样例输出 Copy
【样例1】
8
【样例2】
11
提示
对于60%的数据, 1<=n<=3且0<=d[i]<=10。
对于80%的数据, 1<=n<=10且0<=d[i]<=100。
//
题意:找到一个整数点 使得兔子前往这个点的总距离最短
//
题解:
01 不是简单的求 最大值和最小值之间的中值
02 经 举例归纳 验证:
当兔子个数为 奇数时 走到最中间兔子的位置 总距离最短
当兔子个数为 偶数时 最中间两个兔子之间的任意位置(包括他们本身) 总距离最短
// 兔子
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[30];
int n,i,mid,sum;
while( ~scanf("%d",&n) )
{
for( i=0;i<n;i++ ) scanf("%d",&a[i]);
// 排序 找到中间值
sort( a,a+n );
// n/2 ( 下标 )
// eg. 0 1 2 3 __4/2=2;
// eg. 0 1 2 3 4 __5/2=2;
mid=a[ n/2 ];
sum=0;
for( i=0;i<n;i++ )
{
// abs函数 求整数的绝对值
sum+=abs( mid-a[i] );
}
printf("%d\n",sum);
}
return 0;
}