本题的思路非常简单,让快的先接,就能使平均等待时间最短。
对于排队顺序,我们可以定义一个与主数组相同的副数组,通过查找排序后的主数组的元素在副数组中的位置来确定排队顺序
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (b[j] == a[i])
{
b[j] = -1;//标记,表明其已在队列中
cout << j << " ";
break;
}
}
}
对于保存结果的数一定要开long long 不然会有几个点存不下,下面附上代码。
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
const int N = 1005;
int main()
{
int n, x, y, z, i, j, m;
long long k=0;
long double c;
int a[N], b[N];
cin >> n;
for (i = 1; i <= n; i++)
{
cin >> a[i];
b[i] = a[i];//初始化副数组
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (b[j] == a[i])
{
b[j] = -1;
cout << j << " ";
break;
}
}
}
cout << '\n';
for (int i = 1; i <= n; i++)
{
k += a[i] * (n - i);//求总等待时间
}
c = k * 1.0 / n;
cout << setiosflags(ios::fixed) << setprecision(2) << c;
return 0;
}