7-111 停车场管理 (50分) C++
设有一个可以停放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 <iostream>
#include <string.h>
using namespace std;
int main()
{
int n;
int place[11]={0};
int time[11]={0};
int wait[11]={0};int waiti=-1;
cin>>n;
while(1){
char x;
int carnum,cartime;
cin>>x>>carnum>>cartime;
if(x=='A'){
int flag=0;
for(int j=1;j<=n;j++){
if(place[j]==0){
flag=j;break;
}//这个位置没有车
}
if(flag!=0){
place[flag]=carnum;
cout<<"car#"<<carnum<<" in parking space #"<<flag<<endl;
}//停车入库
else{
wait[++waiti]=carnum;
cout<<"car#"<<carnum<<" waiting"<<endl;
}//等待停车
}//到达
else if(x=='D'){
int flag=0;
for(int j=1;j<=n;j++){
if(place[j]==carnum){
flag=j;break;//flag是查找到了正在停车位上的车位
}
}
if(flag==0){
cout<<"the car not in park"<<endl;
}//没有这个车
else{
cout<<"car#"<<carnum<<" out,parking time "<<time[flag]<<endl;
place[flag]=0;
time[flag]=0;
for(int j=flag;j<=n;j++){
place[flag]=place[flag+1];
time[flag]=time[flag+1];
if(j==n){
place[j]=0;time[j]=0;
}
}
if(waiti!=-1){
place[flag]=wait[0];
for(int j=0;j<waiti;j++){
wait[j]=wait[j+1];
}
waiti--;
cout<<"car#"<<place[flag]<<" in parking space #"<<flag<<endl;
}
}//有这辆车,清除这辆车,查询是否有在等待的车,等待的车进入,后面的等待的要前移
}//离开
else if(x=='E'){
break;
}
for(int j=1;j<=n;j++){
if(place[j]!=0){
time[j]++;
}
}//车位上有车就加1时间
}
return 0;
}