题目描述
有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 ,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待接水时间最小(自己接水的时间不计入等待时间)。
输入格式
第一行为一个整数 n 。
第二行 n 个整数,第 i 个整数 表示第 i 个人的接水时间 。
输出格式
输出最小平均等待接水时间(输出结果精确到小数点后两位)。
样例数据
输入样例1
10
56 12 1 99 1000 234 33 55 99 812
输出样例1
291.90
数据范围
n≤1000, ≤106,不保证 不重复。
解题思路
首先,二话不说打出个模版来
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
}
然后定义变量并输入
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000100];
int main(){
int n;
double cnt=1;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
return 0;
}
再然后就开始读题了( 没错,现在才开始 )
通过题目,很明显是贪心,先要排个序,从小到大进行排列,算出来,就over了
我承认前面都是废话
最后代码
你们绝对只看这边
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000100];
int main(){
int n;
long long sum=0;
double cnt=1;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
sum+=a[i]*(n-i);
}
cnt=sum/(n*1.0);
printf("%.2lf",cnt);
return 0;
}