ACM程序设计省赛题

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

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

4
1 1
3 3
2 2
4 4

Sample Output

3.5000

Source

我的解法
#include<stdio.h>
#define MAX 1000
struct In
{
float come;
float exe;
};
struct In x[MAX];
float zhou[MAX];
int main()
{
int zhouCount=0;
int count=0,i,j;
struct In temp;
float timeCount=0,result=0,T,T1;
scanf("%f",&T);
T1 = T;

while(T--)
{
scanf("%f %f",&x[count].come,&x[count].exe);
count++;
}
for (j = 0; j < T1 - 1; j++)
for (i = 0; i < T1 - 1 - j; i++)
{
if(x[i].come > x[i + 1].come)
{
temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
}
else if
(x[i].come ==x[i + 1].come)
{
if(x[i].exe > x[i + 1].exe)
{
temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
}

}
}

timeCount = x[zhouCount].come;
zhou[zhouCount] = x[zhouCount].exe;

timeCount += zhou[zhouCount++];
for(i=1;i<T1;i++)
{
if(x[i].come<=timeCount)
{
zhou[zhouCount] = x[zhouCount].exe+(timeCount-x[i].come);
timeCount += zhou[zhouCount++];
}
else
{
zhou[zhouCount] = x[zhouCount].exe;
timeCount += zhou[zhouCount++];
}
}
for(i=0;i<T1;i++)
{
result+=zhou[i];

}
result -= x[0].come;
printf("%0.4f\n",result/T1);
return 0;

}

运行结果是对的 ,但是在oj系统里面总是报错 wrong anwer ???
想不通为什么。求指导??
展开
 我来答
yl_shadow
2015-11-30 · TA获得超过960个赞
知道小有建树答主
回答量:257
采纳率:66%
帮助的人:377万
展开全部
你自己测试不够,比如下面这组你的答案是错的:
4
1 1
4 1
8 5
9 2
正确答案应该是3.25,你的是2。
这说明你的代码逻辑有问题。另外说些其他问题:
1、ACM的题目大多都是多组数据,输入输出描述中有“每组测试数据……”之类的,这多组数据是要在一次运行下输入的,而不是运行多次。你最好先学习下关于做ACM题目的各种常见输入输出方式,这是最基本的。
2、“第一行为一个正整数N”,输入明明是一个整数,你读入却用的是float,实数都是有可能存在误差的,比如输入5,T1的值可能是5.00000001,这不是一定会出现,但是一旦出现,你的循环for (j = 0; j < T1 - 1; j++)就会比你预想的多循环一次。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式