C++的救护车调度系统

2024-03-24 20:30
文章标签 c++ 系统 调度 救护车

本文主要是介绍C++的救护车调度系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C++的救护车调度系统,很详细!

一、问题描述

某救护中心所在服务区有5辆救护车,当需要调度时,需要判定哪辆救护车是最优的,不同车辆的油箱容量(单位为公升)、燃油效率(单位为公里/公升)不同。
判定条件为:

(一)救护车中的燃料能够使救护车从当前位置行驶到待救护点,然后再行驶到救护中心;

(二)救护车距离待救护点最近(距离根据两点之间的距离公式计算,单位为公里);

(三)根据油箱中剩余的燃油量和燃油效率能够计算出救护车还能够行驶的里程数。

二、样例输入和样例输出

第1行输入救护中心的位置坐标(x y),用空格隔开;

第2~6行分别输入第1~5辆救护车的位置坐标(x y)、油箱容积、现有燃油量、燃油效率;

第7行输入待救护点的位置坐标(x y),用空格隔开;

如果能找到最优的救护车,则输出救护车的序号(从0开始)和其能够行驶的最大里程信息;

如果找不到满足条件的救护车,则输出“Scheduling Failure!”。

(一)样例输入

197.784 161.559

166.125 190.908 108 39.76 6.85

131.267 118.553 118 85.77 5.78

170.888 147.168 104 0.25 5.54

167.075 121.17 118 57.12 6.92

194.047 114.992 100 88.91 5.72

160.165 152.769

(二)样例输出

the Ambulance index = 0;the max Mileage = 272.356

三、代码实现

#include <bits/stdc++.h>using namespace std;#define AMNUMS 5
#define MAX_FLOAT 3.40282325E38
class point2d{
public:point2d(){};point2d(double x, double y){_x = x;_y = y;}double getX() const{return _x;}double getY() const{return _y;}void setx(double x){_x = x;}void sety(double y){_y = y;}
private:double _x = 0.0;double _y = 0.0;
};double getDistance(const point2d & pt1, const point2d & pt2){double dx = pt1.getX() - pt2.getX();double dy = pt1.getY() - pt2.getY();return sqrt(dx * dx + dy * dy);
}class Ambulance_car{
private:double m_lfCapcity;double m_lfRemain;double m_lfRatio;point2d m_curPosition;
public:Ambulance_car(){};void setcap(double cap){m_lfCapcity = cap;}void setrem(double rem){m_lfRemain = rem;}void setrat(double rat){m_lfRatio = rat;}void setPosition(point2d p){m_curPosition.setx(p.getX());m_curPosition.sety(p.getY());}double getcap(){return m_lfCapcity;}double getrem(){return m_lfRemain;}double getrat(){return m_lfRatio;}double getmaxx(){return getrat() * getrem();}point2d getpos(){return m_curPosition;}
};class EmergencyCenter{
private:point2d m_CenterPos;Ambulance_car m_arCar[AMNUMS];
public:EmergencyCenter(){};void setPosition(point2d p){m_CenterPos.setx(p.getX());m_CenterPos.sety(p.getY());}void setAmPosition(int i, point2d p){m_arCar[i].setPosition(p);}void setAmStatus(int i, double cap, double rem, double rat){m_arCar[i].setcap(cap);m_arCar[i].setrem(rem);m_arCar[i].setrat(rat);}double getAmmaxMileage(int i){return m_arCar[i].getmaxx();}int scheduling(const point2d & ptResecue){int id = -1;double max_dis = 1e18;for(int i = 0; i < AMNUMS; i++){double disa = getDistance(m_arCar[i].getpos(), ptResecue);double disb = getDistance(m_CenterPos, ptResecue);double max_meter = getAmmaxMileage(i);if(max_meter >= disa + disb){if(max_meter < max_dis){id = i;max_dis = max_meter;}}}return id;}
};int main()
{double Ifx,Ify;Ifx = Ify = 0.0;cin>>Ifx>>Ify;point2d pttemp(Ifx,Ify);EmergencyCenter emcenter;emcenter.setPosition(pttemp);double Ifcap,Ifrem,Ifrat;for(int i=0;i<AMNUMS;++i){cin>>Ifx>>Ify>>Ifcap>>Ifrem>>Ifrat;pttemp.setx(Ifx);pttemp.sety(Ify);emcenter.setAmPosition(i,pttemp);emcenter.setAmStatus(i,Ifcap,Ifrem,Ifrat);}cin>>Ifx>>Ify;pttemp.setx(Ifx);pttemp.sety(Ify);int nidx=emcenter.scheduling(pttemp);cout.flags(ios::fixed);cout.precision(3);if(nidx==-1){cout<<"Scheduling Failure!"<<endl;}else{cout<<"the Ambulance index="<<nidx<<";the max Mileage="<<emcenter.getAmmaxMileage(nidx)<<endl;}return 0;
}

四、程序运行结果

这篇关于C++的救护车调度系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842690

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c