zoukankan      html  css  js  c++  java
  • 寒假作业3

    GitHub


    各文件 调试时长 代码行数 调试的bug数
    main.cpp 10-25h 249行 15-29个
    elevator.h - 21行 2个
    elevator.cpp - 16行 0个
    control.h - 21行 0个
    control.cpp - 26行 0个
    总计 10-25h 333行 17-29个

    进击的优化

    • 对非法输入进行警告退出处理
    • 把顺风车模式改成最近接客模式,即如果要去的地方比接下一个请求的来得远,选择接下一个
    • 更好优化的思考:加权移动:不能让电梯上一堆人下去接一个人
    • 更好优化的反思考:加权移动导致了可能错过更多下面要去上面的人
    • 更加好的想法:对历史数据进行估计,判断哪种情况更多,基于历史进行选择

    1

    • 开了新的脑洞
    • 电梯分为停下和运行两个状态
    • 按里面的按钮和外面的按钮没有区别
    • 电梯向按着按钮的楼层出发
    • 到了楼层就更新状态
    • 接客和载客
    • 把状态更新

    2

    • 理了一下
    • 先响应最近的乘客,再响应路途上的乘客

    3

    • 更新的脑洞
    • 维护一个请求表,直接往离当前请求最近的楼层移

    4

    • 写完了,尝试了一些失败的想法,上面的1,2,3可以不看了,讲讲最新的情况

    思路(可以看代码,代码不难看)

    • 使用了面向对象的方法,将电梯和控制面板对象化,用到了之前笔记里的构造函数等等
    • 电梯:可以一层一层上下移动,反馈在第几层,简单地反映电梯里有几个人,上下客,无人即为空载
    • 控制面板:记录请求的人在哪让电梯去接,请求的楼层在哪让电梯去送
    • 使用函数追踪当前电梯离那个请求楼层最近即向哪层移动
    • 许多未使用函数为扩展留下空间

    文档

    • 上次的文档还是可以用的,代码内加了更多的注释

    问题

    • 算法不是最优,程序还有一点bug
    • 回避了对象的消息传递

    样例

    1

    输入5个1 2 3检验同时载客+简单情况
    输出为
    4时,停靠在3楼
    4时,停靠在3楼
    4时,停靠在3楼
    4时,停靠在3楼
    4时,停靠在3楼
    15
    符合预期

    2

    输入
    1 1 2
    2 2 3
    3 3 4
    4 4 5
    5 5 6
    模拟一楼同时上下客情况
    输出
    3时,停靠在2楼
    5时,停靠在3楼
    7时,停靠在4楼
    9时,停靠在5楼
    11时,停靠在6楼
    20
    符合预期

    3

    输入
    1 1 0
    10 5 1
    50 0 3
    70 0 8
    100 1 9
    模拟反复上下楼
    输出
    程序卡死表明有问题
    11时,停靠在10楼
    22时,停靠在1楼
    67时,停靠在3楼
    80时,停靠在8楼
    122时,停靠在9楼
    71
    符合预期
    是没有对0当前位置转换成10处理造成的

    4

    输入
    1 1 0
    2 1 0
    3 1 0
    4 1 0
    5 1 0
    模拟下楼载客情况
    输出
    15时,停靠在10楼
    15时,停靠在10楼
    15时,停靠在10楼
    15时,停靠在10楼
    15时,停靠在10楼
    60
    符合预期

    5

    输入
    1 5 1
    6 1 3
    7 6 2
    10 5 9
    11 3 2
    模拟小规模混乱数据
    输出
    10时,停靠在1楼
    13时,停靠在3楼
    24时,停靠在2楼
    32时,停靠在9楼
    24时,停靠在2楼
    68
    符合预期

    6

    输入
    1 -5 1
    6 1 3
    7 6 2
    10 5 9
    11 3 2
    输出
    输入不合法
    符合预期

    log截图(ps:运行截图不放了,上面的结果拿GitHub里我程序随意复现,主要是截图太占版面)

    一些额外的BB

    • 这是我写的时间最长的一次代码,中途一度想把这个丢了再写一个,还是没有完全放弃,终于写完了
    • 文件读写使用很习惯的freopen("*.*","way",mode),需要'stdio.h'(c)或cstdio(c++)头文件,“.”是需要读写的文件名(和编译后可执行文件同目录下),“way”是“w”或“r”表示write写入或者read读取,“mode”是“stdin”或“stdout”和“read”,“write”互相对应
    • Visual Studio Code是一个不错的编辑器,但是要调教成一个好的IDE还有很多步骤要做
    • 源码里额外的cout输出是bug调试用途,可以测试完整的上下楼流程,比如电梯移动到几楼,接进几个人,几个人下电梯等等
    • 本代码去掉vsc下注释经Visual Studio Code+clang编译生成代码,如果完整IDE请把多个cpp连接编译
    • commit规范由最早的混乱到现在的基本规范主要是从单看廖雪峰git到看了commit规范指南之后的转变
    • 如有纰漏或建议,请各位不吝指教
  • 相关阅读:
    Dangling Javadoc comment
    IntelliJ IDEA :Error(1, 1) java 非法字符 'ufeff'
    什么是webhook
    智能DNS
    filebeat 乱码
    windows,交换机syslog收集
    Rsyslog
    ntp
    centos7 -lvm卷组
    nginx安装
  • 原文地址:https://www.cnblogs.com/passguan/p/8455851.html
Copyright © 2011-2022 走看看