关闭

[华为机试真题]72.操作系统任务调度问题

标签: 华为机试真题
1447人阅读 评论(0) 收藏 举报

题目

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,
系统任务的优先级 < 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;
}
0
0
查看评论

华为机试——03操作系统任务调度问题

/* 3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 系统任务的优先级 = 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。 函数scheduler实现...
  • xiaofei2010
  • xiaofei2010
  • 2013-08-09 20:00
  • 1986

操作系统任务调度问题

华为一道机试题-操作系统任务调度问题 分类: 算法 C++2011-09-16 09:37 1346人阅读 评论(0) 收藏 举报 任务调度华为systemuser任务   操作系统任务调度问题。操...
  • autumn20080101
  • autumn20080101
  • 2014-03-23 16:41
  • 622

【华为上机】操作系统任务调度问题

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 系统任务的优先级 = 50且  现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。  函数scheduler实现如...
  • xvwentao89
  • xvwentao89
  • 2014-09-10 18:03
  • 938

操作系统任务调度问题(华为一上机题,自己写的答案)

#include #include #include #define OVERFLOW -1 #define OK 1 #define ERROR 0 #...
  • wfdtxz
  • wfdtxz
  • 2012-09-15 22:03
  • 2025

Linux是一个多用户多任务的操作系统

Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。    操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主存,但一个系统可能有多个二级存储磁盘和多个输...
  • hq_buddhist
  • hq_buddhist
  • 2016-04-24 15:25
  • 4077

Linux 系统任务有关命令

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 & 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行 ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停 jobs 查看当前...
  • u012675539
  • u012675539
  • 2015-06-07 00:40
  • 990

[华为机试真题]72.操作系统任务调度问题

题目操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小...
  • SunnyYoona
  • SunnyYoona
  • 2015-07-07 21:57
  • 1447

华为机试——操作系统任务调度问题

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 ,用户任务的优先级 >= 50且 。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能...
  • hyg0811
  • hyg0811
  • 2013-07-17 16:07
  • 938

华为机试——03操作系统任务调度问题

/*  3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,  系统任务的优先级 = 50且   现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。 ...
  • dyf20081124
  • dyf20081124
  • 2014-08-13 19:50
  • 196

【华为机试题】操作系统任务调度问题

操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级...
  • stone_flower_rain
  • stone_flower_rain
  • 2015-08-12 16:47
  • 471
    个人资料
    • 访问:1512811次
    • 积分:22559
    • 等级:
    • 排名:第379名
    • 原创:624篇
    • 转载:133篇
    • 译文:60篇
    • 评论:189条
    博客专栏
    文章分类
    最新评论