n個顧客同時等待一項服務,有s處可以提供此項服務--貪心演算法
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;
}
結果截圖: