[ACM]佳佳的课程 NUC关于入队考试那些事

佳佳的课程设计

Time Limit: 1000ms       Memory Limit: 65535K
Total Submissions: 39       Accepted: 21

Description

佳佳这学期学的操作系统课终于结课啦~(好高兴啊,又少一门课),但是周老师却布置了操作系统课程设计实验,当然不是让每个人写一个操作系统哈,而是让同学们模拟实现CPU调度运行进程的一个重要算法——时间片轮转调度算法。时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。但是周老师不仅要求大家实现这个算法,还要计算出CPU运行这些进程的平均周转时间(平均周转时间就是用总的周转时间除以进程个数,周转时间则是进程结束时间减去进程开始时间)。这可难倒了佳佳,聪明的你能帮帮她么?为了简化问题,假设CPU固定时间片为1,每个进程所需的CPU运行时间均为正整数。

Input

有多组测试数据,每组测试数据第一行输入一个正整数n(n ≤ 100),表示以下将给出n个进程,第二行则有n个正整数,用空格分开,分别表示1~n个进程每个进程所需的CPU运行时间。假设所有进程都是在0时刻以1~n的顺序几乎同时开始的(即所有进程的开始时间都为0)。

Output

每行首先输出“Case #t: ”,t表示当前是第t组测试数据,接着输出CPU运行这些进程的平均周转时间,保留3位小数。

Sample Input

2
4 4
3
2 9 1

Sample Output

Case #1: 7.500
Case #2: 6.333

Hint

第一组测试数据是这样运行的:

所以进程1的结束时间是7,进程2是8,则平均周转时间为(7+8)/2=7.500

Source

NUC






#include <stdio.h>
#include <string.h>
const int N = 105;
int que[N];
int BFS(int front,int rear,int n)
{
    int ret = 0,tt = 0;
    while (front != rear)
    {
        int u = que[front ++];
        front %= (n+1);
        tt ++,u --;
        if (u == 0)
            ret += tt;
        else {
            que[rear++] = u;
            rear %= (n+1);
        }
    }
    return ret;
}
int main ()
{
    #ifdef LOCAL
        freopen("data1.in","r",stdin);
    #endif
    int n,a,cnt = 0;
    while (~scanf ("%d",&n))
    {
        int rear = 0,front = 0;
        for (int i = 0;i < n;i ++){
            scanf ("%d",&a);
            que[rear++] = a;
        }
        printf ("Case #%d: %.3f\n",++cnt,BFS(front,rear,n)*1.0/n);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值