C/C++知识点之C.进程调度实例讲解
小标 2018-08-27 来源 : 阅读 1116 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C.进程调度实例讲解,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C.进程调度实例讲解,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C.进程调度

Time Limit: 1000 MS Memory Limit: 65536 KB
Total Submissions: 270 Accepted: 66
Description

操作系统的一个重要功能是进行进程调度,其进程调度的算法有多种,其中最简单的调度算法是先来先服务(FCFS)算法。该算法的思想是:先进入就绪队列的先执行,后进入就绪队列的后执行,同一时刻进入就绪队列的执行时间少的先执行。我们认为某一进程一旦开始执行,就一直占用处理机,直到执行结束。而一旦处理机被其它进程占用,就绪队列中的进程就必须等待。当某一进程执行结束后,队列中排在最前面的进程就会立即执行。一个进程从进入就绪队列到执行完毕所用的时间为其周转时间,即周转时间=等待时间+执行时间。现在给你若干进程到达就绪队列的时间以及每个队列的执行时间,请编程计算这些进程的平均周转时间。

Input

多组测试数据。

每组测试数据的第一行为一个正整数N(N<=1000),表示要处理的进程数目。

接下来有N行,每行有两个正整数Ai(Ai<=1000)和Ei(Ei<=1000),分别表示一个进程到达就绪队列的时刻和执行该进程所需的时间。

Output

对于每组测试数据,输出平均周转时间,结果保留4位小数。

每组输出占一行。

Sample Input

4

11

33

22

44

Sample Output

3.5000

Hint

进程1等待时间为0,执行时间为1,其周转时间为0+1=1;

进程3等待时间为0,执行时间为2,其周转时间为0+2=2;

进程2等待时间为1,执行时间为3,其周转时间为1+3=4;

进程4等待时间为3,执行时间为4,其周转时间为3+4=7;

故平均周转时间=(1+2+4+7)/4=3.5000。

Source

2013 Anhui College Student Programming Contest--ahfywff

\

# include   
# define M 1000 
# define N 2 
void Dsort(intint *tree[],int n);  
int A[M][N],*P[M];  
int main()  
{  
    int n,i,time0=0,time1=0,sum;  
    //freopen("AAA.txt","r",stdin);  
    while(~scanf("%d",&n))  
    {  
    for(i=0;i<n;P[i]=A[i],i++)  
        scanf("%d %d",&A[i][0],&A[i][1]);  
    Dsort(P,n);  
    time1=P[0][0]+P[0][1];  
    time0=0;  
    sum=P[0][1];  
    //printf("%d %d %lld\n",time0,time1,sum);  
    for(i=1;i<n;i++)  
    {  
        if(P[i][0]<time1)time0=time1-P[i][0];  
        else 
        {  
            time0=0;//time0=当前进程-时间点=等待时间  
            time1=P[i][0];  
        }  
        time1+=P[i][1];//当前进程结束后的时间点  
        sum+=time0+P[i][1];  
        //printf("%d %d %lld\n",time0,time1,sum);  
    }  
    printf("%.4lf\n",sum*1.0/n);  
    }  
    return 0;  
}  
void Dsort(intint *tree[],int n)  
{  
    int i,j=0,k,L,*R;  
    tree--;  
    while((i=++j)<=n)  
    {  
        R=tree[i];  
        while(i>1)  
        {  
            L=(i>>1);  
            for(k=0; k<N&&tree[L][k]==R[k]; k++);  
            if(tree[L][k]>=R[k]) break;  
            tree[i]=tree[L];  
            i=L;  
        }  
        tree[i]=R;  
    }  
    while(n)  
    {  
        R=tree[n];  
        tree[n--]=tree[1];  
        i=1;  
        L=2;  
        while(L<=n)  
        {  
            if(L<n)  
            {  
                for(k=0; k<N&&tree[L+1][k]==tree[L][k]; k++);  
                if(tree[L+1][k]>tree[L][k])L++;  
            }  
            for(k=0; k<N&&tree[L][k]==R[k]; k++);  
            if(tree[L][k]<=R[k]) break;  
            tree[i]=tree[L];  
            i=L;  
            L<<=1;  
        }  
        tree[i]=R;  
    }  
    tree++;  
}    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程