题目
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,
系统任务的优先级 < 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}
代码
#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;
}
vector<SystemNode> vec;
for(i = 0;i < size;++i){
SystemNode node(task[i],i);
vec.push_back(node);
}
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);
}
else if(vec[i].priority >= 50 && vec[i].priority <= 255){
user_task.push_back(vec[i].num);
}
}
system_task.push_back(-1);
user_task.push_back(-1);
}
int main(){
int n,i;
while(cin>>n){
vector<int> task(n,0);
for(int i = 0;i < n;++i){
cin>>task[i];
}
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;
}
else{
cout<<system_task[i]<<" ";
}
}
for(i = 0;i < userSize;++i){
if(i == userSize-1){
cout<<user_task[i]<<endl;
}
else{
cout<<user_task[i]<<" ";
}
}
}
return 0;
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
华为机试真题(非牛客网试练题)OD考试真题,不定期更新,文档含代码解答
华为机试一霸教你过华为机试演讲稿..pdf
华为OD机试(..75.rar
收集整理华为机试108题,目录清晰,内涵C、C++答案 适合初中级练手学习,短时突击
华为OD系列--华为OD机试
华为机试一霸教你过华为机试.doc
华为机试一霸教你过华为机试。大菊厂招聘有三关,心理测试,机试,面试。
。。。
。。。
华为OD机试真题整理合集
(43条消息) 华为OD机试真题2023(JAVA&JS)_华为机试真题_若博豆的博客-CSDN博客.mhtml
华为机试(Python)真题Od.docx
华为 OD 机试真题 机试题专栏 题目来自牛客平台机考同学的机试分享,题目描述信息可能记录不完整,题解无法保证通过率,只提供结题思路,注意!注意!!不要直接使用博主代码进行机考! 欢迎加微信: Ayemmar 本文...
在华为OD机试真题中,应聘者需要解决一系列的算法和数据结构问题,例如字符串处理、数组操作、链表操作、树操作、图操作等等。此外,应聘者还需要熟练掌握编程语言,例如C++、Java、Python等等,能够熟练地使用各种...
华为机试算法题总结 经验分享
里面有几十道华为历届考过的机试题,可供大家研究和参考,主要是里面的思想,只要理解透了里面的思想,非常有助于机试。
贰壹贰叁零华为OD机试.pptx 华为OD机试.pptx 华为OD机试.pptx
本人在准备2014年华为机试的时候,进行整理的,代码全部运行成功。如有错误,请大家见谅。
华为机试.md
华为机试.py