n个顾客同时等待一项服务,顾客i需要的服务时间为ti(1<=i<=n),共有s处可以提供此项服务。应如何安排n
个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。
具体代码:
#include<stdio.h>
#include<stdlib.h>
void minwait(int *p,int *w,int s,int n)
{
int i,j,t;
int *q=new int[n];
for(i=0;i<n;i++)q[i]=0;
for(i=0;i<n;i++)w[i]=0;
printf("第n个客户 服务时间\n");
for(i=0;i<n;i++)
printf(" %d\t %d\n",i+1,p[i]);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(p[i]>p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
i=0;
j=0;
while(i<n)
{
if(i<s)
{
q[j]=0;
w[j]=0;
i++;
j++;
}
else
{
q[j]+=p[i-s];
w[j]+=q[j];
i++;
j++;
}
if(j==s)j=0;
}
double ave=0;
for(i=0;i<s;i++)
ave+=w[i];
printf("平均等待时间最小值为: %f\n",ave/n);
}
void main()
{
int s,n;
printf("共有n个客户,n为: ");
scanf("%d",&n);
printf("共有s处可以提供此项服务,s为: ");
scanf("%d",&s);
int *p=new int[n];
int *w=new int[n];
int i;
for(i=0;i<n;i++)
p[i]=rand()%n+1;
minwait(p,w,s,n);
delete []p;
delete []w;
}
结果截图: