7-2 停车场管理 (50分)

28 篇文章 1 订阅

设有一个可以停放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");
			}	
		}
	}
}
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值