[C语言]多处最优服务次序

[题目]:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti(1<=i<=n)。假设只有1处提供此服务。

应如何安排n个顾客的服务次序才能使平均等待时间达到最小?(平均等待时间是n个顾客等待服务时间总和除以n)

输入:第一行为一个正整数n,表示有n个顾客

第二行为n个正整数,表示n个顾客需要的服务时间

输出:最小平均等待时间。

[解析]:有n个顾客同时等待一项服务,已知每位顾客所需服务时间,服务窗口为1。

故若有1位顾客等待此服务,他将直接被服务,等待时间为0。

若有2位顾客等待此服务,则在服务第一位顾客时,第二位顾客进入等待时间,在服务完第一位顾客时,第二位顾客开始被服务,所以第二位顾客等待时间为第一位顾客的服务时间t1。

以此类推:若有三位顾客,则等待总时间S=t1*2+t2*1+t3*0。由此可知想要最小等待总时长,最先被服务的顾客所需服务时间应该最小,最后被服务的顾客所需服务时间为最大。


#include <stdio.h>
void Swap(int *a, int *b)
{ // 交换函数
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int n, s = 0;
    scanf("%d", &n);
    int time[n];
    printf("输入等待时间:");
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &time[i]);
    }
    // 所需服务时间排序
    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (time[i] > time[j])
            {
                Swap(&time[i], &time[j]);
            }
        }
    }
    // 打印升序排序数组
    // for (int i = 0; i < n; i++)
    // {
    //     printf("%d ", time[i]);
    // }
    //计算等待总时长
    for (int i = 0; i < n; i++)
    {
        s += time[i] * (n - i);
    }
    float avg = s * 1.0 / n;

    printf("\n平均等待时长为:%.2f\n", avg);

    return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值