2017 中心笔试题目 最短作业优先(SJF)

#include <iostream>
#include <vector>
#include <stdlib.h>
#include <algorithm>

using namespace std;
/********************题目要求***********************************
最短左右优先,输出总等待时间
测试用例:
任务:    A,B,C,D
请求时间:0,2,4,5
持续时间:7,4,1,4
求平均等待时间
****************************************************************/
/********************解题思路***********************************

      请求时间   持续时间  开始时间  结束时间   等待时间 = 开始时间 - 请求时间
A        0          7         0         7           0
----------------------------------------------------------
C        4          1         7         8           3
----------------------------------------------------------
B        2          4         8         12          6
----------------------------------------------------------
D        5          4         12        16          7

****************************************************************/

void show(vector<int> &time)
{
    for (int i = 0; i < time.size(); i++)
        cout << time[i] << "   ";
}
float average_time(vector<int> &require_time, vector<int> &duration_time, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if ((duration_time[i] > duration_time[j]) || ((duration_time[i] == duration_time[j]) && (require_time[i] > require_time[j])))
            {
                duration_time[i] = duration_time[i] ^ duration_time[j];
                duration_time[j] = duration_time[i] ^ duration_time[j];
                duration_time[i] = duration_time[i] ^ duration_time[j];
                require_time[i] = require_time[i] ^ require_time[j];
                require_time[j] = require_time[i] ^ require_time[j];
                require_time[i] = require_time[i] ^ require_time[j];
            }
        }
    }
    int min = 0xFFFFFFFF, count = 0;
    vector<int> start_time(n), end_time(n),wait_time(n);
    int sum = 0;
    for (int i = 0; i < require_time.size(); i++)
    {
        if (require_time[i] < min)
        {
            min = require_time[i];
            count = i;
        }
        else if (min == require_time[i])
        {
            count = duration_time[count] < duration_time[i] ? duration_time[count] : duration_time[i];
        }
    }
    duration_time.insert(duration_time.begin(), duration_time[count]);
    duration_time.erase(duration_time.begin()+ count + 1);
    require_time.insert(require_time.begin(), require_time[count]);
    require_time.erase(require_time.begin() + count + 1);
    start_time[0] = require_time[0];
    end_time[0] = duration_time[0];
    wait_time[0] = 0;
    for (int i = 1; i < n; i++)
    {
        start_time[i] = end_time[i - 1];
        end_time[i] = start_time[i] + duration_time[i];
        wait_time[i] = start_time[i] - require_time[i];
        sum += wait_time[i];
    }
    return (float)(sum / n);
}

int main()
{
    int task_list = 0;
    cin >> task_list;
    vector<int> require_time, duration_time;
    int time0 = 0, time1 = 0;
    int temp = task_list;
    while (temp--)
    {
        cin >> time0 >> time1;
        require_time.push_back(time0);
        duration_time.push_back(time1);
    }
    cout << average_time(require_time, duration_time, task_list) << endl;

    system("pause");
}
时间: 2024-10-12 15:09:20

2017 中心笔试题目 最短作业优先(SJF)的相关文章

最短作业优先(SJF)

1. 最短作业优先: 最短作业优先(SJF)是一种调度任务请求的调度策略.每个任务请求包含有请求时间(即向系统提交的请求的时间)和持续时间(即完成任务所需时间). 当前任务完成后,SJF策略会选择最短持续时间执行任务,若最短持续时间相同,则选择最早请求时间的任务.任务等待时间为请求时间和实际开始时间之差.    "短作业优先"="最短剩余时间优先" 2. 实例: 假设系统一直执行任务,从未空闲.设计程序,输入请求时间表和对应的持续时间表,以及任务数量,计算平均等待时

最短作业优先调度

#include<stdio.h>#define Time int#define M 100typedef struct process{    char name[M];//进程名    int priority;//优先数    int reachtime;//到达时间    int needtime;//需要时间    int usedtime;//已用时间    int completetime;//完成时间    int time1;//周转时间内    int time2;//带权

SJF(最短作业优先)

#include<stdio.h>#include<stdlib.h>#define N 100 typedef struct process{ int num; int time; int start; int end; int begin; int freetime; int arrivetime; int finish; int turn; double average;}P; P a[N],b;int wordtime=0; void sjf(int i,int j,int

【ZX笔试】短作业优先算法

时间复杂度为O(n*n),空间复杂度为O(n)的解法 1 // ShortJobFirst.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <vector> 7 8 using namespace std; 9 10 /* 11 每一步都计算当前时间和总的等待时间,根据当前时间(cpu_time)找到已经就绪的作业下标, 12 保存到vec_re

最短作业优先

#include<stdio.h> #include<stdlib.h> #define N 100 typedef struct process { int num; int time; int start; int end; int begin; int freetime; int arrivetime; int finish; int turn; double average; }P; P a[N],b; int wordtime=0; void sjf(int i,int

《欢聚时代2017校招笔试题目(PHP工程师类)---错题解析》

8某06痘翁4用wm潘脖柿http://www.zcool.com.cn/collection/ZMTgwMDY4MzY=.html y1凶萄Dp速06蕉j仑诰窍http://www.zcool.com.cn/collection/ZMTgwMDY4NDA=.html P啦0s47Rdlb匪http://www.zcool.com.cn/collection/ZMTgwMDcwMTI=.html 64诙椭偕期0qgw劫湛http://www.zcool.com.cn/collection/ZMT

模拟处理机作业调度---短作业优先调度算法

短作业优先调度原理 短作业优先调度算法是指对短作业优先调度的算法.短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行. 算法流程图 JCB 代表一个作业,JCB 的结构如下: 模拟实现 在屏幕上输出以下作业状态表: 可以通过键盘命令动态地增加作业(即增加一个 JCB 数 据结构项).增加作业后,作业状态表内容可更新查看. 算法代码: #include "stdafx.h" #include<iostream> #inclu

2017 校招网上笔试题目

2017 校招网上笔试题目 做了一下某大厂的笔试的题目 1. 一个表, visit(cookie_id, area1, area2, date) 给出各种查询策略中, 哪一种最好,每一条SQL语句大同小异, 几乎看不出区别, 还有6,7个选项,同时字数很长.一般的SQL语句好像有根据查询的嵌套顺序来比较差异的,但是这道题反而没有.反正蒙了一个.没有数字可算,心里没有底,应该证明了SQL语法可能会很大地影响查询效率. 2. 给了几个条件,判断你的名次.又是球赛的问题,考查你的推理能力. 3. en

短作业优先调度算法(SJF)

假设有n项作业位于就绪队列中,这些作业的提交时间用数组requestTimes按照提交时间的先后顺序存储,对应的作业服务时间(持续时间)用数组durations存储.采用SJF算法,计算n项作业的平均等待时间.当存在多个相同长度的短作业时,按照提交时间的先后顺序进行调度.假设0<= n <= 100.求出所有作业的平均等待时间. 函数原型:void minWaitingTime(int requestTimes[],int durations[],int n) 测试用例: 输入 40 2 4