题目:
题目描述
设有n 个顾客同时等待一项服务。顾客i需要的服务时间为t i, 1<=i<=n 。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间以及服务时间的总和除以n。
对于给定的n个顾客需要的服务时间,编程计算最优服务次序。
输入
第一行是正整数n,表示有n 个顾客。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。
输出
最小平均等待时间
样例输入复制
10 56 12 1 99 1000 234 33 55 99 812
样例输出复制
532.00
解题思路:
这题的解题思路应该是,先将每个人需要的服务时间进行冒泡排序,也就是让需要服务时间更少的人先接受服务。
运行结果:
最后给大家看一下冒泡排序的具体步骤:
源代码:
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int j = 0;
int arr[10000];//这里这个实在是搞不懂,我设置100的时候平台不给我过,设置10000就过了哈哈
float sum = 0;
int tmp = 0;//用于排序时的交换数
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);//注意这里的scanf后面一定不要自作多情去多加一个空格,加了运行的时候会出错
}
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)//小心这里的冒泡排序j的判断范围
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}//利用冒泡排序的方式进行升序排列
for (i = 0; i < n; i++)
{
sum = sum + arr[i] * (n - i);
}
printf("%.2f\n", sum / n);
return 0;
}