您的位置:首页 > 其它

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

2014-01-22 10:58 204 查看

佳佳的课程设计

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
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 多组数据