[ACM]佳佳的课程 NUC关于入队考试那些事
2014-01-22 10:58
204 查看
佳佳的课程设计
Time Limit:1000ms Memory Limit:65535KTotal 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;
}
相关文章推荐
- 网上找的一个关于HP Mercury的考试课程的报价表
- 关于计算机信息系统集成项目管理人员继续教育2011年度课程考试安排的通知
- 关于大学,关于计算机专业,关于ACM那些事
- 关于2006年硕士生入学考试专业课程考试科目变更的通知
- 山东理工大学ACM平台题答案关于C语言 1295 螺旋方阵
- 山东理工大学ACM平台题答案关于C语言 1048 Digital Roots
- 关于烂代码的那些事(上)
- 山东理工大学ACM平台题答案关于C语言 1294 选票统计
- 关于教学设计,ISD,课程制作(过去、现在、未来)
- 数据库课程设计总结:关于Oracle11g的使用
- 关于年会抽奖那些事
- scjp考试准备 - 4 - 关于数组
- 关于移动端的那些事
- 理工大学ACM平台题答案关于C语言 1006 Sum Problem
- systemverilog中关于事件的那些事
- 杭电ACM 今年暑假不AC 2037(关于最简单的贪心算法)
- 【山东】关于2012年下半年计算机技术与软件专业技术资格(水平)考试有关问题的通知
- 关于Android命名空间的那些事,也就是xmlns这个
- 准备ACM/ICPC!!关于数据输入方式的探讨。
- 关于前端入门的那些事