0076-小升初1:生日蛋糕

题目

小升初1:生日蛋糕
难度级别:B; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述
一个中学生(在线测评系统的系统管理员)过生日了,他邀请了许多人来参加她的生日聚会,生日聚会中最重要的一件事情就是吃蛋糕了。一个中学生共邀请了n个人,这些人的心里都想好了自己要多少克蛋糕。如果给他少了,他就会郁闷(没有吃到足够多的蛋糕)。如果给他多了,他也会郁闷(因为他不能浪费,需要把这些蛋糕都吃了,撑着了会不舒服)。一个人的郁闷指数为他想要的蛋糕克数与他实际得到的蛋糕克数之差(记住:一定是大数减小数)。一个中学生想指定一个人想要的蛋糕克数作为标准,给每个人都是这么多蛋糕。聚会是件高兴的事情,同学们郁闷指数之和越小越好,现在他需要知道同学们的郁闷指数最低值是多少,请你编写程序帮他实现。 
输入
第一行为正整数n,表示参加聚会总共有n位同学。第二行为n个正整数,表示每个人想要得到的蛋糕克数(<=1000)。
输出
输出所有人的郁闷指数之和的最小值
输入示例
5
100 300 200 100 300
输出示例
400
其他说明
数据范围及样例说明:1 < n < 100000,样例方案为选 200 作为标准 。

分析

  纯循环题终于过的差不多了,下面咱们来了解一种极其需要和循环搭配使用的数据存储方式——数组。

  数组是用于储存多个相同类型数据的集合,不过,这么高深的定义对咱们来说还是……算了吧……

  使用方法在此不一一赘述,下面了解一个新的东西。

  系统排序,又称智能排序。一般指通过一行来完成选择排序十几行的排序,同时要快于部分排序算法。

  所以再返回来,这道题只需要读入每个人需求量的数组,然后排序,接着取下标中间的那个数,与其它数作差取绝对值就行了。

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[100005],ans;
int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++) scanf("%d",&a[i]);//读入数组。
	sort(a,a+n);//系统排序。
	for(int i=0;i<n;i++) ans+=abs(a[i]-a[n/2]);//取下标正中间的数并累加其与其他每个人需求量差的绝对值。
	printf("%d",ans);
	return 0;
}
原文地址:https://www.cnblogs.com/DARTH-VADER-EMPIRE/p/9799291.html