c++【题目描述】 有n个人在一个水龙头前排队接水,假如每个人接水的时间为T; 请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小,输出平均等待时间。 【输入】第一行为一个整数n,表示等待接水的人数,第二行为每个人接水的时间。 【输出】一个数表示平均等待时间。 【输入示例】 2 2 4 【输出示例】 1
时间: 2024-03-23 15:38:44 浏览: 160
这是一个经典的调度问题,可以采用贪心算法来解决。具体思路是,每次让等待时间最短的人先接水。具体实现可以使用 STL 中的优先队列来完成。以下是对应的 C++ 代码实现:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
priority_queue<int, vector<int>, greater<int>> q; // 小根堆
for (int i = 0; i < n; i++) {
int t;
cin >> t;
q.push(t);
}
double ans = 0, wait = 0;
while (!q.empty()) {
int t = q.top();
q.pop();
wait += t;
ans += wait;
}
ans /= n;
printf("%.0f\n", ans);
return 0;
}
```
这里使用了小根堆来保存等待时间,并且使用了 double 类型来避免整数除法的精度问题。注意,这里使用了 printf 来输出结果,因为 cout 在精度处理上会出现问题。
阅读全文