设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车场的最里面) 。如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车可以进入停车场。停车场内如有某辆车要开走,则在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费,停留在便道上的车不收停车费。编写程序对该停车场进行管理。
输入格式:
先输入一个整数n(n<=10),再输入若干组数据,每组数据包括三个数据项:汽车到达或离开的信息(A表示到达、D表示离开、E表示结束)、汽车号码、汽车到达或离开的时刻。
输出格式:
若有车辆到达,则输出该汽车的停车位置;若有车辆离开,则输出该汽车在停车场内停留的时间。如果汔车号码不存在,输出the car not in park
输入样例:
3
A 1 1
A 2 2
A 3 3
D 1 4
A 4 5
A 5 6
D 4 7
D 5 8
E 0 0
输出样例:
car#1 in parking space #1
car#2 in parking space #2
car#3 in parking space #3
car#1 out,parking time 3
car#4 in parking space #3
car#5 waiting
car#4 out,parking time 2
car#5 in parking space #3
car#5 out,parking time 1
我的答案:
#include<stdio.h>
int park[2][10]={0};
int waiting[10]={0};
int main()
{
int n;
scanf("%d",&n);
char op;
int num,time;
while(1){
scanf("%c %d %d",&op,&num,&time);
switch(op)
{
case 'A':A(num,time,n);break;
case 'D':D(num,time,n);break;
case 'E':return 0;
}
}
}
int A(int num,int time,int n)//车辆到达
{
for(int i=0;i<n;i++)
{
if(park[0][i]==0)
{
park[0][i]=num;
park[1][i]=time;
printf("car#%d in parking space #%d\n",num,i+1);//正常入库
return 0;
}
}
int i=0;
while(1){
if(waiting[i]==0)
{
waiting[i]=num;
printf("car#%d waiting\n",num);//车位已满,放到便道
return 0;
}
i++;
}
}
int D(int num,int time,int n)//车辆离开
{
int parkingtime;
for(int i=0;i<n;i++)
{
if(park[0][i]==num)
{
int parkingtime=time-park[1][i];
printf("car#%d out,parking time %d\n",num,parkingtime);//正常出库
for(int j=i;j<n-1;j++)
{
park[0][j]=park[0][j+1];
park[1][j]=park[1][j+1];
}
if(waiting[0]==0){//判断便道有无等待车辆
park[0][n-1]=0;
park[1][n-1]=0;
}else{
park[0][n-1]=waiting[0];
park[1][n-1]=time;
printf("car#%d in parking space #%d\n",waiting[0],3);//便道车入库
int j=0;
for(j=0;waiting[j+1]!=0;j++)
{
waiting[j]=waiting[j+1];
}
waiting[j]=0;
}
return 0;
}
}
printf("the car not in park\n");//没有找到匹配车辆号码
return 0;
}