[华为机试真题]72.操作系统任务调度问题
2015-07-07 21:57
423 查看
题目
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,
系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。
现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。
函数scheduler实现如下功能:
将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中
(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。
例如:
task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}
system_task[] = {0, 3, 1, 7, -1}
user_task[] = {4, 8, 2, 6, -1}
代码
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,
系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。
现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。
函数scheduler实现如下功能:
将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中
(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。
例如:
task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}
system_task[] = {0, 3, 1, 7, -1}
user_task[] = {4, 8, 2, 6, -1}
代码
/*--------------------------------------- * 日期:2015-07-07 * 作者:SJF0115 * 题目:操作系统任务调度问题 * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include <algorithm> using namespace std; struct SystemNode{ // 优先级 int priority; // 下标 int num; SystemNode(int p,int n){ priority = p; num = n; } SystemNode(){} }; // 排序函数 bool cmp(SystemNode node1,SystemNode node2){ return node1.priority < node2.priority; } void scheduler(vector<int> task,vector<int> &system_task,vector<int> &user_task){ int i; int size = task.size(); if(size == 0){ return; }//if vector<SystemNode> vec; for(i = 0;i < size;++i){ SystemNode node(task[i],i); vec.push_back(node); }//for // 排序 sort(vec.begin(),vec.end(),cmp); // 分为系统任务和用户任务 for(i = 0;i < size;++i){ if(vec[i].priority >= 0 && vec[i].priority < 50){ system_task.push_back(vec[i].num); }//if else if(vec[i].priority >= 50 && vec[i].priority <= 255){ user_task.push_back(vec[i].num); }//else }//for system_task.push_back(-1); user_task.push_back(-1); } int main(){ int n,i; //freopen("C:\\Users\\Administrator\\Desktop\\acm.txt","r",stdin); while(cin>>n){ // 输入 vector<int> task(n,0); for(int i = 0;i < n;++i){ cin>>task[i]; }//for vector<int> system_task; vector<int> user_task; scheduler(task,system_task,user_task); int sysSize = system_task.size(); int userSize = user_task.size(); // 输出系统任务 for(i = 0;i < sysSize;++i){ if(i == sysSize-1){ cout<<system_task[i]<<endl; }//if else{ cout<<system_task[i]<<" "; }//else }//for // 输出用户任务 for(i = 0;i < userSize;++i){ if(i == userSize-1){ cout<<user_task[i]<<endl; }//if else{ cout<<user_task[i]<<" "; }//else }//for }//while return 0; }
相关文章推荐
- 虚幻4蓝图:流程控制(一)
- 面试常问的40个问题 附带经典答案!
- 【Java】若MxN矩阵中某个元素为0, 则将其所在的行与列清零
- unity3d中的碰撞系统
- QTabWidget 双击增加tab页
- 防盗手机之开篇
- 在网页中嵌入百度地图
- 【Linux 内核网络协议栈源码剖析】accept 函数剖析
- 数据挖掘 K-Means++聚类算法
- wifi破解
- 操作缓存文件,熟悉File操作
- 查看修改mysql编码方式
- c++对象模型的初步理解
- 七月七号
- SQL Server2008 的安装
- [Leetcode]-Contains Duplicate HashTbale重解
- 《财务决策与分析》——期末总结(慕课组)
- 神经网络中的softmax函数
- MySQL Python Windows下的安装经历(失败)
- opencv cvSobel()以及Scharr滤波器