C++贪心——排队接水

题目描述

有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 Ti​,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待时间最小。

输入格式

第一行为一个整数 n。

第二行 n 个整数,第 i个整数 Ti​ 表示第 i 个人的等待时间 Ti​。

输出格式

输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

分析:

最短的排队顺序应该是将小数放到后面,大数在后面。使后面的等待时间少一些。平均等待时间应该是,将每个人的等待时间乘上后面等待的人数在加一起除以人数。

代码:

#include
using namespace std;
struct jieshui
{int t;//等待时间int id;//序号
}ti[1100];
bool paixu(jieshui a, jieshui b) {if (a.t < b.t)return true;else return false;
}
int  main() {int n;double sum=0;cin >> n ;for (int i = 1; i <= n; i++) {cin >> ti[i].t;ti[i].id = i;}sort(ti + 1, ti + 1 + n, paixu);for (int i = 1; i <= n; i++) {cout << ti[i].id << " ";sum += ti[i].t * (n-i);}cout << endl;cout << fixed << setprecision(2);cout << sum/n;return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部