7-3 停车场管理 (20point(s))
设有一个可以停放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>
#include <stdbool.h>
#include <stdlib.h>
#define MAXVAL 10
typedef struct _item {
int num;
int time;
} Item;
typedef struct _stack {
Item val[MAXVAL];
int p;
} Stack;
Stack* createStack(void);
void push(Stack *pstack, const Item pitem);
Item pop(Stack *pstack);
bool isEmpty(Stack *pstack);
bool isFull(Stack *pstack);
int n;
int main()
{
char flag;
int a, b, h, t;
Item queue[100];
Stack *stop = NULL;
scanf("%d", &n);
stop = createStack();
h = 0;
t = 0;
while (true)
{
Item item;
scanf("%c %d %d", &flag, &a, &b);
// printf("读到了:%c %d %d\n", flag, a, b);
if (flag == 'E') {
break;
}
item.num = a;
item.time = b;
if (flag == 'A') {
if (!isFull(stop)) {
push(stop, item);
// printf("item.num = %d\n", item.num);
printf("car#%d in parking space #%d\n", item.num, stop->p);
} else {
queue[t = (t+1) % 100] = item;
printf("car#%d waiting\n", item.num);
}
} else if (flag == 'D') {
if (!isEmpty(stop)) {
Stack *st = createStack();
int found = 0;
while (!isEmpty(stop))
{
Item tmp = pop(stop);
if (tmp.num == item.num) {
printf("car#%d out,parking time %d\n", tmp.num, b - tmp.time );
found = 1;
} else {
push(st, tmp);
}
}
if (!found) {
printf("the car not in park\n");
}
// 还原车位
while (!isEmpty(st)) {
push(stop, pop(st));
}
if (!isFull(stop) && t != h) {
Item tmp = queue[h = (h+1) % 100];
tmp.time -= t - h - 1;
push(stop, tmp);
printf("car#%d in parking space #%d\n", tmp.num, stop->p);
}
} else {
printf("the car not in park\n");
}
}
}
free(stop);
return 0;
}
Stack* createStack(void)
{
Stack *p = malloc(sizeof(Stack));
return p;
}
void push(Stack *pstack, const Item pitem)
{
int *p = &(pstack->p);
if (*p < n) {
pstack->val[(*p)++] = pitem;
}
}
Item pop(Stack *pstack)
{
return pstack->val[--(pstack->p)];
}
bool isEmpty(Stack *pstack)
{
return pstack->p == 0;
}
bool isFull(Stack *pstack)
{
return pstack->p == n;
}
7-3 停车场管理 (20point(s))的更多相关文章
- 停车场管理软件附带源代码 J2EE服务端+android客户端
该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1 机构管理 ,机构有从属管理< ...
- 完整版本的停车场管理系统源代码带服务端+手机android客户端
该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1 机构管理 ,机构有从属管理< ...
- JSP/JAVA目录清单
JAVA253中国象棋(CS) JAVA258网络五子棋游戏的设计与实现(CS) JAVA390停车场管理系统SQL(CS) JSP001学生综合素质测评系统JAVA+Mysql JSP002学生成绩 ...
- 递归处理vue菜单数据
结构不多说,bean的封装很简单,直接上核心代码吧,自己根据需要把不要的属性自己过滤掉: public List<MenuBo> getMenuByUserId(Long user_id, ...
- 《BUG创造队》第二次团队作业:团队项目选题报告
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验六 团队作业2:团队项目选题 团队名称 BUG创造队 作业学习目标 可行性自评总结,并且采用NABCD方法进行项目初步分 ...
- Chapter 5 软件工程中的形式化方法
从广义上讲,形式化方法是指将离散数学的方法用于解决软件工程领域的问题,主要包括建立精确的数学模型以及对模型的分析活动.狭义的讲,形式化方法是运用形式化语言,进行形式化的规格描述.模型推理和验证的方法. ...
- Mifare简介
Mifare简介 MIFARE是NXP的知名品牌,是一个应用广泛的非接触式IC产品(13.56MHz非接触性辨识技术),一个典型的通信距离为10厘米,在全球有40多个不同的应用领域.有2.6亿个读写器 ...
- android项目大全,总有你所需的
注:打开请贴网址.有些直接通过链接打开的不对. 1.相对布局实例 http://kukuqiu.iteye.com/blog/1018396 2.Log图文具体解释(Log.v,Log.d,Log. ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
- (转载) android项目大全,总有你所需的
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 [置顶] android项目大全,总有你所需的 标签: 源 ...
随机推荐
- FastDFS配置文件思维导图(内含各配置文件详细参数说明)
- EFK-2:ElasticSearch高性能高可用架构
转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483811&idx=1&sn=a413dea65f ...
- K8S ingress控制器
文章转载自: K8S ingress控制器 (一)https://blog.51cto.com/u_13760351/2728917 K8S ingress控制器 (二)https://blog.51 ...
- 企业MES系统与ERP信息集成要素有哪些?
关于要讲明企业MES系统与ERP信息集成要素有哪些,得先弄清楚他们之间的关系:从工厂的管理来说,ERP在上MES在下,ERP统领企业全局包括MES,为管理层服务,重心在于企业决策,ERP对企业宏观管理 ...
- 关于VirtualBox在新建虚拟机时-选择操作系统类型后没有64位的版本选项
今天笔者准备使用VirtualBox安装一台windows的虚拟时,在选项操作系统类型为Microsoft Windows后 发现下面的版本选择中,没有之前看到的64位选择,全是32位的,但实际昨天都 ...
- Jmeter——BeanShell 内置变量vars、props、prev的使用
在使用Jmeter过程中,或多或少都会接触些BeanShell,它会使工具的使用,变得更灵活. Jmeter中关于BeanShell的有: 1.BeanShell Sampler 取样器:完成Bean ...
- python学习笔记---流程控制
二.流程控制 2.1选择结构与语句 2.1.1 最简单的if语句 注意:if语句后边必须加上冒号 满足条件后.可以执行多条语句. #最简单的if语句 print("请输入一个既能整除2,又能 ...
- JavaScript函数式编程之函子
函子(Functor) 函子是一个特殊的容器,通过一个普通对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系),容器包含值和值变形关系(这个变形关系就是函数).函数式编 ...
- Oracle数据库PLSQL编程和存储过程
一.PLSQL编程 1.1.使用PLSQL实现 Hello world! 1 -- Created on 2022/8/22 by ADMINISTRATOR 2 declare 3 -- 这是申明变 ...
- JVM调优工具使用手册
作为Java开发人员,我们肯定知道JDK的bin目录下有"java.exe"."javac.exe"这两个命令工具,这也是我们平时用得最多的工具.但其实bi ...