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

相关文章

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域