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

来源:互联网 发布:好用的c语言编程软件 编辑:程序博客网 时间:2024/04/27 19:22

佳佳的课程设计

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

24 432 9 1

Sample Output

Case #1: 7.500Case #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
原创粉丝点击