您的位置:首页 > 其它

2007年浙大研究生复试机试真题-游船出租

2012-04-17 08:34 267 查看
/*题目描述:
现有公园游船租赁处请你编写一个租船管理系统。当游客租船时,管理员输入船号并按下S键,系统开始计时;
当游客还船时,管理员输入船号并按下E键,系统结束计时。船号为不超过100的正整数。当管理员将0作为船号输入时,
表示一天租船工作结束,系统应输出当天的游客租船次数和平均租船时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有租船没有还船,或者只有还船没有租船的纪录,
系统应能自动忽略这种无效纪录。
输入:
测试输入包含若干测试用例,每个测试用例为一整天的租船纪录,格式为:
船号(1~100) 键值(S或E) 发生时间(小时:分钟)
每一天的纪录保证按时间递增的顺序给出。当读到船号为-1时,全部输入结束,相应的结果不要输出。

输出:
对每个测试用例输出1行,即当天的游客租船次数和平均租船时间(以分钟为单位的精确到个位的整数时间)。
样例输入:
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
-1
样例输出:
2 196
0 0
1 60
*/
#include <cstdio>
typedef struct{
int flag;
int s_h,s_m;
int e_h,e_m;
}chuan;
chuan t[105];

int main()
{
int number,hour,minute;
char c;
int i,total_time,time,ave_time;
//	freopen("f:/in.txt","r",stdin);
while(scanf("%d",&number)!=EOF && number!=-1)
{
scanf(" %c %d:%d",&c,&hour,&minute);       //   最后一个回车 不用处理,因为下一行首次读入数字

for(i=0;i<105;i++)
t[i].flag=0;
total_time=time=0;   //     Initiate

if(0==number)
{
printf("0 0\n");
continue;
}
else
{
if(c=='S')
{
t[number].flag=1;
t[number].s_h=hour;
t[number].s_m=minute;
}

}
while(scanf("%d %c %d:%d",&number,&c,&hour,&minute))
{
if(number==0)
break;
switch(c)
{
case 'S':
if(t[number].flag==0)
{
t[number].flag=1;
t[number].s_h=hour;
t[number].s_m=minute;
}
break;
case 'E':
if(t[number].flag==1)
{
t[number].flag=0;
t[number].e_h=hour;
t[number].e_m=minute;
total_time+=(t[number].e_h-t[number].s_h)*60+t[number].e_m-t[number].s_m;
time++;
}
break;
default:
break;
}
}
if(time==0)
{
printf("0 0\n");
continue;
}
//  四舍五入
if((float)(total_time)/time-total_time/time>=0.5)
ave_time=total_time/time+1;
else
ave_time=total_time/time;

printf("%d %d\n",time,ave_time);
}
//	fclose(stdin);
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试 struct float c 工作