博客
关于我
P1223_排队接水(JAVA语言)
阅读量:124 次
发布时间:2019-02-27

本文共 1823 字,大约阅读时间需要 6 分钟。

为了解决这个问题,我们需要找到一种排队顺序,使得n个人的平均等待时间最小。根据短作业优先调度算法,我们可以确定处理时间较短的人应该排在前面,以减少整体的平均等待时间。

方法思路

  • 问题分析:每个人在排队时的等待时间是前面所有人处理时间的总和。为了最小化平均等待时间,我们需要安排处理时间较短的人更早排队。
  • 排序策略:将处理时间从小到大排序。如果处理时间相同,则按照原输入顺序排列。
  • 计算等待时间:遍历排序后的队列,计算每个人的等待时间,并累加到总和中。
  • 输出结果:输出排队顺序及其平均等待时间。
  • 解决代码

    import java.util.Arrays;
    import java.util.Comparator;
    public class Main {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int[] times = new int[n];
    for (int i = 0; i < n; i++) {
    times[i] = in.nextInt();
    }
    Muta[] mutas = new Muta[n];
    for (int i = 0; i < n; i++) {
    mutas[i] = new Muta(times[i], i + 1);
    }
    Arrays.sort(mutas, new Comparator
    () {
    @Override
    public int compare(Muta a, Muta b) {
    if (a.v != b.v) {
    return Integer.compare(a.v, b.v);
    } else {
    return Integer.compare(a.o, b.o);
    }
    }
    });
    StringBuilder orderStr = new StringBuilder();
    for (Muta m : mutas) {
    orderStr.append(m.o).append(" ");
    }
    System.out.println(orderStr.toString().trim());
    double total = 0;
    double sum = 0;
    for (Muta m : mutas) {
    total += sum;
    sum += m.v;
    }
    System.out.println(String.format("%.2f", total / n));
    }
    static class Muta {
    int v;
    int o;
    Muta(int v, int o) {
    this.v = v;
    this.o = o;
    }
    }
    }

    代码解释

  • 读取输入:从标准输入读取n和每个人的处理时间数组。
  • 创建Muta对象:将每个处理时间和原索引存储在Muta对象中。
  • 排序处理时间:根据处理时间从小到大排列,处理时间相同则按原索引排序。
  • 生成排列顺序:提取排序后的索引,生成排队顺序字符串。
  • 计算等待时间:遍历排序后的队列,计算每个人的等待时间并累加到总和中。
  • 输出结果:输出排队顺序和平均等待时间,保留两位小数。
  • 转载地址:http://hwcb.baihongyu.com/

    你可能感兴趣的文章
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    MySql 手动执行主从备份
    查看>>
    Mysql 批量修改四种方式效率对比(一)
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>
    MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>
    MySQL 数据库的高可用性分析
    查看>>
    MySQL 数据库设计总结
    查看>>
    Mysql 数据库重置ID排序
    查看>>
    Mysql 数据类型一日期
    查看>>
    MySQL 数据类型和属性
    查看>>