2016广东工业大学第一次月赛E题

本文介绍了一个简单的算法,用于解决一群人如何选择一个集合点,使得所有人从各自位置出发到达集合点的距离总和最小的问题。通过计算每个人的位置,并找出使得总距离最小的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem E: 郊游

Description

小明有很多个朋友,他们在家分别分布在 x 轴上的不同位置。有一天,他们想一起出去郊游,首先他们需要定一个地点集合,使得这个地点让他们从各自家里到该点的距离总和最小,小明想知道这个最小的距离总和是多少。

Input

有多组测试数据。第一行是一个整数 n,代表总共有n个人,第二行是n个数字,代表这些人的家在x轴上的位置。1 <= n <= 100,0 <= xi <= 1000。最后以一个0结束输入。

Output

对于每组数据,输出一个整数,代表最小的距离总和。

Sample Input

31 2 30

Sample Output

2



#include<iostream>

#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
       int n;
        int minm,b[100000],a[100000];
       while(cin>>n&&n)
        {

minm=0;

 memset(a,0,sizeof(a));
        for(int i=0; i<n; i++)
           cin>>a[i];
        for(int i=0; i<n; i++)
        {
            b[i]=0;
            for(int j=0; j<n; j++)
            {
                if(a[i]>a[j])
                    b[i]+=(a[i]-a[j]);
                else
                  b[i]+=(a[j]-a[i]);
            }
        }
        for(int i=1; i<n; i++)
        {
           if(b[i]<b[minm])
                minm=i;
        }

        cout<<b[minm]<<endl;

        }

        return 0;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值