Problem E: 驾驶员与汽车
来源:互联网 发布:fc2破解版手机域名设置 编辑:程序博客网 时间:2024/04/28 22:34
Problem E: 驾驶员与汽车
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 819 Solved: 369
[Submit][Status][Web Board]
Description
我们知道,目前我国的驾照大致可分为A、B、C三种,其中C证只能开小型客车(货车),B证可开中、小型客车(货车),A证没有限制。现在请定义如下几个类:
1. Automobile:抽象类,具有数据成员double speed,纯虚函数virtual void run() const = 0。
2. 六种车型,即小型车Benz、Buick;中型车Zhongba、Beiqi;以及大型车Dayu、Jianghuai。它们都是Automobile的子类。
3. Driver类,具有string name和char type两个数据成员,前者是司机的名字,后者是司机持有的驾照类型(A、B或C)。提供Drive(Automobile *)方法,根据驾照类型判定该司机是否可以驾驶指定的汽车。
Input
输入分多行。第一行是一个整数M>0,表示之后有M个测试用例。
每个测试用例包括四部分:司机姓名(不含空白符)、驾照类型(A、B或C)、车型(分别用字母a~f表示六种车型,对应的车型可以从main()中看出)以及该车的行驶速度(double类型范围内的正数)。
Output
输出共M行,每个测试用例对应一行输入,具体格式参见样例。
Sample Input
4 zhangsan C a 100.33 lisi C d 100.33 wangwu B f 100.33 Tom A e 300.00
Sample Output
Driver zhangsan can drive Benz at speed of 100.33km/h. A Benz is erased! An automobile is erased! Driver lisi cannot drive bus. A Beiqi is erased! An automobile is erased! Driver wangwu cannot drive large bus. A Jianghuai is erased! An automobile is erased! Driver Tom can drive Dayu at speed of 300.00km/h. A Dayu is erased! An automobile is erased!
HINT
1.使用typeid来判定一个基类指针实际指向的对象的类型。
2.注意:append.cc中已经给出了Driver类的一个方法,不要在Driver类重复定义了。
Append Code
#include<iostream>#include<set>#include<iterator>#include<string>#include<set>#include <typeinfo>#include<queue>#include<list>#include<algorithm>#include<cstdio>#include<cctype>#include<cstring>#include<map>#include<vector>#include<cstdlib>#include<cmath>#include<stack>#include<sstream>#include<iomanip>using namespace std;class Automobile{protected: double speed;public: virtual void run() const = 0; Automobile(double s=0):speed(s){} virtual ~Automobile(){cout<<"An automobile is erased!"<<endl;}};class Benz:public Automobile{ protected: double speed;public: Benz(double s=0):speed(s){} void run()const{cout<<setiosflags(ios::fixed)<<"Benz at speed of "<<setprecision(2)<<speed<<"km/h."<<endl;} ~Benz(){cout<<"A Benz is erased!"<<endl;}};class Buick:public Automobile{ protected: double speed;public: Buick(double s):speed(s){} void run()const{cout<<setiosflags(ios::fixed)<<"Buick at speed of "<<setprecision(2)<<speed<<"km/h."<<endl;} ~Buick(){cout<<"A Buick is erased!"<<endl;}};class Zhongba:public Automobile{ protected: double speed;public: Zhongba(double s):speed(s){} void run()const{cout<<setiosflags(ios::fixed)<<"Zhongba at speed of "<<setprecision(2)<<speed<<"km/h."<<endl;} ~Zhongba(){cout<<"A Zhongba is erased!"<<endl;}};class Beiqi:public Automobile{protected: double speed;public: Beiqi(double s):speed(s){} void run()const{cout<<setiosflags(ios::fixed)<<"Beiqi at speed of "<<setprecision(2)<<speed<<"km/h."<<endl;} ~Beiqi(){cout<<"A Beiqi is erased!"<<endl;}};class Dayu:public Automobile{ protected: double speed;public: Dayu(double s):speed(s){} void run()const{cout<<setiosflags(ios::fixed)<<"Dayu at speed of "<<setprecision(2)<<speed<<"km/h."<<endl;} ~Dayu(){cout<<"A Dayu is erased!"<<endl;}};class Jianghuai:public Automobile{protected: double speed;public: Jianghuai(double s):speed(s){} void run()const{cout<<setiosflags(ios::fixed)<<"Jianghuai at speed of "<<setprecision(2)<<speed<<"km/h."<<endl;} ~Jianghuai(){cout<<"A Jianghuai is erased!"<<endl;}};class Driver{protected: string name; char type;public: void Drive(Automobile *); Driver(string n,char t):name(n),type(t){} ~Driver(){}};void Driver::Drive(Automobile *automobile){ switch (type) { case 'A': cout<<"Driver "<<name<<" can drive "; automobile->run(); break; case 'B': if (typeid(*automobile) == typeid(Dayu) || typeid(*automobile) == typeid(Jianghuai)) cout<<"Driver "<<name<<" cannot drive large bus."<<endl; else { cout<<"Driver "<<name<<" can drive "; automobile->run(); } break; case 'C': if (typeid(*automobile) != typeid(Benz) && typeid(*automobile) != typeid(Buick)) cout<<"Driver "<<name<<" cannot drive bus."<<endl; else { cout<<"Driver "<<name<<" can drive "; automobile->run(); } break; }}int main(){ string name; char type; double speed; char automobileType; int cases; Automobile *automobile; cin>>cases; for (int i = 0; i < cases; i++) { cin>>name>>type>>automobileType>>speed; Driver driver(name, type); switch (automobileType) { case 'a': automobile = new Benz(speed); break; case 'b': automobile = new Buick(speed); break; case 'c': automobile = new Zhongba(speed); break; case 'd': automobile = new Beiqi(speed); break; case 'e': automobile = new Dayu(speed); break; case 'f': automobile = new Jianghuai(speed); break; } driver.Drive(automobile); delete automobile; } return 0;}
0 0
- Problem E: 驾驶员与汽车
- Problem A: 驾驶员与汽车
- Problem A: 驾驶员与汽车
- Problem D: 驾驶员与汽车
- Problem B: 驾驶员与汽车
- Problem E: 图形计数与求面积
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- problem E
- Problem E
- Problem E
- Problem E
- Linux进程描述符task_struct结构体详解
- Python3字符串
- 分别以十进制、八进制和十六进制输出一个字符的ASCII
- Union与Union All的区别
- Ubuntu 安装 JDK 7 / JDK8 的两种方式
- Problem E: 驾驶员与汽车
- 求卷积层对卷积核导数旋转180的解释
- JavaScript语言设计的败笔
- 日常-关于“Cannot read property 'length' of null”报错
- spring框架学习笔记04
- 基于视频压缩的实时监控系统-A5:net.c代码解析
- 基于视频压缩的实时监控系统-A4:main.c代码解析
- LeetCode:Rotate Image
- 搭建高可用的MongoDB集群:MongoDB的配置与副本集