C++贪心——排队接水

C++贪心——排队接水,第1张

题目描述

有 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;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/2991609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存