C++编写优先队列打印任务

2023-11-18


打印机的打印队列中,每一个打印任务都有一个优先级,为1~9的一个整数(9的优先级最高,1的优先级最低),打印按如下方法进行。

(1)取出打印队列中队首的打印任务J;

(2)如果打印队列中存在优先级高于J的打印任务,则将J移动到打印队列的队尾;否则,打印J.

现在的问题是,要确定你要打印的文件何时打印完毕。给定当前打印队列(一个优先级队列)和你的打印任务在当前打印队列中的位置,确定你的打印任务完成时需要多长时间。为了简化问题,假定没有新的打印任务加入到打印队列中;并且,假定完成任何一个打印任务均需要1min时间,向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。

例如,当前打印队列为“1 1 9 1 1 1”且你的打印任务在队首时,需要5min。



#include<iostream>
#include<queue>

using namespace std;


static int n = 0;
struct node {
    int num;
    bool finished;
};


//初始化
void Chushi(queue<node> &q) {
    int m, n;
    int data;
    node p;
    cout << "请输入打印任务个数,以及所在位置:";
    cin >> m >> n;
    cout << "请输入他们的优先级:" << endl;
    for (int i = 0; i < m; i++) {
        if (i != n) {
            cin >> data;
            p.num = data;
            p.finished = false;
            q.push(p);
        }
        else {
            cin >> data;
            p.num = data;
            p.finished = true;
            q.push(p);
        }
    }
}


//判断函数
bool judge(queue<node> q, node p) {
    int max = p.num;
    for (int i = 0; i < q.size(); i++) {
        if (max < q.front().num) {
            return false;
            break;
        }
        q.pop();
    }
    return true;
}

//求解所花费时间
void Miniute(queue<node> &q) {
    while (q.front().finished != true || judge(q, q.front()) == false) {
        while (judge(q, q.front()) == false) {
            q.push(q.front());
            q.pop();
        }
        if (q.front().finished == true) {
            n++;
            break;
        }
        else {
            q.pop();
            n++;
        }
    }
    n++;
}

int main() {
    queue<node> q;
    Chushi(q);
    Miniute(q);
    cout << "所用时间为:" << n << endl;
    system("pause");
    return 0;
}


#include<iostream>

#include<queue>

using namespace std;


static int n = 0;
struct node {
    int num;
    bool finished;
};


//初始化
void Chushi(queue<node> &q) {
    int m, n;
    int data;
    node p;
    cout << "请输入打印任务个数,以及所在位置:";
    cin >> m >> n;
    cout << "请输入他们的优先级:" << endl;
    for (int i = 0; i < m; i++) {
        if (i != n) {
            cin >> data;
            p.num = data;
            p.finished = false;
            q.push(p);
        }
        else {
            cin >> data;
            p.num = data;
            p.finished = true;
            q.push(p);
        }
    }
}


//判断函数
bool judge(queue<node> q, node p) {
    int max = p.num;
    for (int i = 0; i < q.size(); i++) {
        if (max < q.front().num) {
            return false;
            break;
        }
        q.pop();
    }
    return true;
}

//求解所花费时间
void Miniute(queue<node> &q) {
    while (q.front().finished != true || judge(q, q.front()) == false) {
        while (judge(q, q.front()) == false) {
            q.push(q.front());
            q.pop();
        }
        if (q.front().finished == true) {
            n++;
            break;
        }
        else {
            q.pop();
            n++;
        }
    }
    n++;
}

int main() {
    queue<node> q;
    Chushi(q);
    Miniute(q);
    cout << "所用时间为:" << n << endl;
    system("pause");
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++编写优先队列打印任务 的相关文章

随机推荐

  • Mabot机器人趣味视频教程-变速风扇

    如何从炎热的夏天中解脱 利用Mabot制作一个电风扇或许是个好主意 制作电风扇之前 我们需要提前了解一下电风扇的工作原理 电风扇主要是由一个旋转轴带动扇叶进行旋转 我们可以将五孔梁当做扇叶 Mabot的驱动球可以当做旋转轴 然后加上底座和支
  • awk字符串函数(printf格式化输出) -- shell

    awk有许多强大的字符串函数 gsub r s 在整个 0中 用s代替r gsub r s t 在整个t中 用s代替r 替换字符串 index s t 返回s中字符串t的第一位置 未用过 length s 返回s长度 c语言strlen m
  • 题12:字符串匹配Pabinkarp(上)

    package 字符串问题 public class case12 字符串匹配之Pabinkarp public static void main String args String s ABABABA 源字符串 String p BAB
  • 2022年江苏省大学生电子设计竞赛(TI杯)电赛 B题 无人机 省级一等奖记录 “一个摆烂人的独白”

    前期 从大一进校开始 我就参加了学校的创新实验室 遇到了很多很好的老师 但种种原因吧 实验室断代了 我也算搭草台班子 大一开始就作为实验室负责人 开始负责实验室的各项事务 大一寒假的时候 老师让我在校电赛试试无人机 初生牛犊不怕虎 也不知道
  • 在 Flutter 中实现一个浮动导航栏

    此图与正文无关 只是为了好看 写在前面 这段时间一直在学习 Flutter 在 dribble 上看到一张导航栏设计图 就是下面这张 感觉很是喜欢 于是思考着如何在 Flutter 中实现这个效果 设计图作者 Luk Stra k 经过一番
  • Apollo平台计算框架CyberRT

    Cyber RT 框架 Cyber RT Robotic Technology 是一种基于ROS Robot Operating System 的开发框架 专门设计用于构建高性能 实时性要求较高的机器人应用程序 旨在提供一套可靠 高效 灵活
  • Java并发编程必备:分布式锁的选型和性能对比

    当涉及到分布式系统中的并发控制和数据一致性时 分布式锁是一种常见的解决方案 下面我将对几种常见的分布式锁实现原理 实现示例 应用场景以及优缺点进行详细分析 1 基于数据库的分布式锁 实现原理 基于数据库的分布式锁使用数据库的事务机制和唯一索
  • Vue实现点击复制文本功能

    1 功能 在页面中实现点击复制内容到粘贴板的功能 2 安装clipboard npm install clipboard 3 封装工具类 新建clipboard js 内容如下 import Vue from vue import Clip
  • 嵌入式(标准IO)

    嵌入式自学第十三天 1 Linux IO进程课程目的 学习编写linux应用程序 APP 2 Linux文件的种类 常规文件 目录文件 字符文件 块文件 链接文件 相当于windows快捷方式 3 IO的概念 I input 输入设备 比如
  • 关于Python模块shelve存储的对象,改变字典的值时必须将获取的副本赋给一个临时变量的更好解决方法

    文章的关键点 将函数open的参数writeback设置为True就不需要引用一个临时变量 开始文章的叙述 如何将数据存储到文件中 如果需要的是简单的存储方案 模块shelve可替你完成大部分工作 你只需提供一个文件名即可 对于模块shel
  • Vector非线程安全

    Vector的方法加了同步锁 但对于复合操作未加锁 是非线程安全的 如经典的put if absent 线程的安全性包括线程的可见性 有序性 原子性 if vector contains element vector add element
  • Modbus 485继电器开、关、读 串口指令

    以下均为地址01时的命令 开继电器1 01 06 00 00 00 01 48 0A 关继电器1 01 06 00 00 00 00 89 CA 开继电器2 01 06 00 01 00 01 19 CA 关继电器2 01 06 00 01
  • Java NIO 的前生今世 之二 NIO Channel 小结

    Java NIO Channel 通常来说 所有的 NIO 的 I O 操作都是从 Channel 开始的 一个 channel 类似于一个 stream java Stream 和 NIO Channel 对比 我们可以在同一个 Chan
  • 高淇Struts2.0教程之视频笔记(4)

    4 struts2配置文件 struts xml 详解 4 1指定web应用默认字符集
  • java几位_JAVA 获得数字第几位的几种方法总结(转)

    JAVA获得某个数字的最后第几位是什么的方法 比如 1234567890 则获得最后第三位 则返回8 public class Test 字典 里面保存的是1 10 100 1000 直到long的最大允许位数 private static
  • Latex插入图片并引用

    插入图片主要为viso文件和excel图表 两种图片如果直接转pdf的话会有大片空白区域 不利于排版 解决办法 excel图表粘贴到viso中 后面两中图片处理方法相同 点击另存 保存格式为可移植网络图形 即png格式 保存路径为latex
  • 2023华为od机试统一考试B卷【阿里巴巴找黄金宝箱(III)】

    题目描述 贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 阿里巴巴念出一个咒语数字 查看宝箱是否存在两个不同箱子 这两个箱子上贴的数字相同 同时这两个箱子的编号之差的绝
  • 2022蓝桥杯学习——1.递归和递推

    递归 关于递归 所有的递归都可以转换成一棵递归搜索树 我们需要考虑的是枚举的顺序 例题 1 递归实现指数型枚举 题目描述 从 1 n 这 n 个整数中随机选取任意多个 输出所有可能的选择方案 输入格式 输入一个整数 n 输出格式 每行输出一
  • vue实现鼠标放上去就有提示_Vue实现鼠标经过文字显示悬浮框效果的示例代码

    需求 在所做的Vue项目中 需要在鼠标移动文字框的时候显示一些详细信息 最终实现的效果如下 鼠标经过button的时候 可以在光标附近显示出一个悬浮框 显示框里面显示时间和值的信息 鼠标移出button元素的时候 这个显示框会消失 分析 涉
  • C++编写优先队列打印任务

    打印机的打印队列中 每一个打印任务都有一个优先级 为1 9的一个整数 9的优先级最高 1的优先级最低 打印按如下方法进行 1 取出打印队列中队首的打印任务J 2 如果打印队列中存在优先级高于J的打印任务 则将J移动到打印队列的队尾 否则 打