贪心算法_排队接水_C++_1319:【例6.1】
·
贪心算法_排队接水_C++_1319:【例6.1】
//
【题目描述】
有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
【输入】
共两行,第一行为n(1≤n≤1000);第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。
【输出】
有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
【输入样例】
10
56 12 1 99 1000 234 33 55 99 812
【输出样例】
3 2 7 8 1 4 9 6 10 5
291.90
C++代码:
//
#include<bits/stdc++.h>
using namespace std;
//利用结构体排序
struct Person{
int t;//接水时间
int no;//序号
}a[1005];
//结构体排序cmp函数
bool cmp(Person p1,Person p2){
return p1.t<p2.t;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].t;
a[i].no=i;
}
double sum=0;
sort(a+1,a+1+n,cmp);//结构体排序
for(int i=1;i<=n;i++){
cout<<a[i].no<<' ';
sum+=a[i].t*(n-i);//需要的总时间
}
printf("\n%.2lf",sum/n);
}
更多推荐
所有评论(0)