7-2 停車場管理 (50分)
阿新 • • 發佈:2021-01-01
設有一個可以停放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>
typedef struct CAR{
char zt;
int num;
int in;
}car;
int main()
{
int n;
scanf("%d",&n);
int space=1,xb;
car a[100];
int last,wait=-1,k=0,flag,f;
do{
scanf ("%c %d %d",&a[k].zt,&a[k].num,&a[k].in);
if(a[k].zt!='E')k++;
}while(a[k].zt!='E');
for(int i=0;i<k;i++){
if(a[i].zt=='E'){
break;
}else if(a[i].zt=='A'){
if(space!=n+1){
printf("car#%d in parking space #%d\n",a[i].num,space);
space++;
}else{
printf("car#%d waiting\n",a[i].num);
wait=a[i].num;
}
}else if(a[i].zt=='D'){
f=0;
flag=a[i].in;
for(int j=0;j<i;j++){
if(a[i].num==a[j].num){
f=1;
last=a[i].in-a[j].in;
break;
}
}
if(f){
printf("car#%d out,parking time %d\n",a[i].num,last);
//此處將離開停車場的號碼設定為不作處理的號碼
for(int p=0;p<k;p++){
if(a[p].num==a[i].num){
a[p].num=-1;
}
}
space--;
if(wait!=-1){
for(int j=0;j<k;j++){
if(wait==a[j].num&&a[j].zt=='A'){
a[j].in=flag;
break;
}
}
printf("car#%d in parking space #%d\n",wait,space);
wait=-1;
}
}else{
printf("the car not in park\n");
}
}
}
}