福州大学研究生院怡山的同学们为了在国家对抗新冠疫情期间献出自己的一份力量,他们决定为奋战在一线的医护人员送去了演出。小黄作为研究生协会的会长,他让每位男同学均带去了若干只猫或狗去表演节目,而小李是研究生会的副会长,她让每位女同学唱歌或者跳舞。去医院前,每位同学都事先预计了表演要持续的时间。不过,在献爱心时,他们都不愿意输给同学,一旦发现自己的节目预期持续时间短于已经表演过的同类节目的最长时间,则会临时延长表演时间,至同类节目的最长时间。

精彩的表演过程被全程录下来,每个节目一段,医护人员们会不断地点播重放这些节目,增添了不少欢乐。

现给出以下基类框架:

class Group

{

protected:

int length; //时间长度

public:

virtual void play()=0;//重放节目

};

以Group为基类(如果觉得有必要,可以向Group类中加入若干成员函数),构建出BoyGroup和GirlGroup两个类,分别描述生物组和艺术组的表演。

要求主函数中有一个基类Group指针数组,数组元素不超过20个。

Group *g[20];

主函数根据输入的信息,相应建立BoyGroup或GirlGroup类对象,对于BoyGroup类对象要能给出参与表演的动物(cat/dog)及其数量,和表演的时间(以秒为单位); 对于GirlGroup类对象要能给出表演的类型(dance/sing),和表演的时间。

输入格式:

首先输入表演信息

每一行为一位同学的表演信息:

其中第1项为组别, B为男同学组,A为女同学组,如果输入为E,则表示结束输入表演信息。

对于所有男同学来说,接下来依次输入参与表演的动物(C或D, C指cat,D指dog), 动物的数量(不小于1的正整数),预期表演的时间长度T(正整数)。

对于所有女同学来说,接下来输入表演的形式(S或D, S指sing, D指dance),预期表演的时间长度T(正整数)

第一行的表演节目编号为1,第二行为2,依此类推。

接着输入点播要求:

点播要求为一行以空格隔开的若干个数字,最后一个数字是0。除0以外的每个数字均为节目编号(假设所给的节目编号对应的表演肯定存在)。

输出格式:

点播节目的信息。每行一个。按点播次序给出。

输入样例:

B C 2 5
B C 1 3
B D 2 2
A S 2
A S 8
A S 4
A D 1
B C 2 7
E
1 6 2 7 4 0

输出样例:

2 cats, 5 seconds
sing, 8 minutes
1 cat, 5 seconds
dance, 1 minute
sing, 2 minutes

说明:

节目1:B C 2 5意味着2只cats表演5秒

节目2: B C 1 3意味着1只cat表演3秒,但是以前cat类节目的最长时间为5秒,大于3秒,所以此时实际节目为1只cat表演5秒

节目3:B D 2 2意味着2只dogs表演2秒

节目4:A S 2意味着sing2分钟

节目5:A S 8意味着sing8分钟

节目6:A S 4意味着sing4分钟,但是此前sing类节目的最长时间为8分钟,大于4分钟,所以此时实际节目为sing8分钟。

节目7:A D 1意味着dance1分钟

节目8:B C 2 7意味着2只cats表演7秒

E意味着结束输入节目信息

1 6 2 7 4 0

意味着依次输出1,6,2,7,4节目的具体信息,每行一个节目。

//通过静态变量实现
#include <iostream>
using namespace std;
class Group {
protected:int length;static int maxcat;static int maxdog;static int maxsing;static int maxdance;
public:virtual void play() = 0;Group(int len) { length = len; }
};
int Group::maxcat = 0;
int Group::maxdog = 0;
int Group::maxsing = 0;
int Group::maxdance = 0;
class BoyGroup :public Group {
private:string name;int number;
public:BoyGroup(char name, int num,int len ) :Group(len) {if (name == 'c' || name == 'C') {this->name = "cat";if (maxcat > len)  length = maxcat;else maxcat=len;}if (name == 'd' || name == 'D') {this->name = "dog";if (maxdog > len)  length = maxdog;else maxdog=len;}number = num;}void play() {cout << number<<" "<<name;if (number > 1) cout << "s, "; else cout << ", ";cout << length << " second";if (length > 1)cout << "s";cout << endl;}
};
class GirlGroup :public Group {
private:string name;
public:GirlGroup(char name, int len) :Group(len) {if (name == 'S' || name == 's') {this->name = "sing";if (maxsing > len)  length = maxsing;else maxsing=len;}if (name == 'D' || name == 'd') { this->name = "dance"; if (maxdance> len)  length = maxdance;else maxdance=len;}}void play() {cout << name << ", " << length << " minute";if (length > 1)cout << "s";cout << endl;}
};int main() {Group* g[20];int len,num,i=0;char sex, type;while (cin >> sex,sex!='E'){if (sex == 'B') {cin >> type >> num >> len;g[i++] = new BoyGroup(type, num, len);}else if (sex == 'A'){cin >> type >> len;g[i++] = new GirlGroup(type, len);}}while (cin >> i,i!=0){g[i - 1]->play();}return 0;
}
#include <iostream>
using namespace std;
class Group {
protected:int length;
public:virtual void play() = 0;virtual string getname() = 0;Group(int len) { length = len; }int getlen() { return length; }void setlen(int l) { length = l; }
};
class BoyGroup :public Group {
private:string name;int number;
public:BoyGroup(char name, int num,int len ) :Group(len) {if (name == 'c' || name=='C') this->name = "cat";if (name == 'd' || name == 'D')this->name = "dog";number = num;}void play() {cout << number<<" "<<name;if (number > 1) cout << "s, "; else cout << ", ";cout << length << " second";if (length > 1)cout << "s";cout << endl;}string getname() { return name; }
};
class GirlGroup :public Group {
private:string name;
public:GirlGroup(char name, int len) :Group(len) {if (name == 'S' || name == 's') this->name = "sing";if (name == 'D' || name == 'd')this->name = "dance";}void play() {cout << name << ", " << length << " minute";if (length > 1)cout << "s";cout << endl;}string getname() { return name; }
};
void check(Group* g[], int n) {for (size_t i = 0; i < n; i++){if (g[n - 1]->getlen()<g[i]->getlen() && g[n - 1]->getname() == g[i]->getname()) {g[n - 1]->setlen(g[i]->getlen());}}
}
int main() {Group* g[20];int len,num,i=0;char sex, type;while (cin >> sex,sex!='E'){if (sex == 'B') {cin >> type >> num >> len;g[i++] = new BoyGroup(type, num, len);check(g, i);}else if (sex == 'A'){cin >> type >> len;g[i++] = new GirlGroup(type, len);check(g,i);}}while (cin >> i,i!=0){g[i - 1]->play();}return 0;
}

7-6 小黄与研究生会(25分)相关推荐

  1. L2-3 小A爱旅游 (25 分)

    小A是一个热爱旅游的人,他住在1号城市.B国有N座城市与N-1条高速公路,由高速公路连接的两座城市可以相互到达,数据保证从1号城市出发可以抵达其它所有城市.小A会依据如下方式进行旅游参观: 1.如果从 ...

  2. 7-3 银行排队问题之单队列多窗口服务 (25 分)

    7-3 银行排队问题之单队列多窗口服务 (25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可 ...

  3. python turtle绘图-案例集锦(小猪佩奇、哆啦A梦、小黄人、樱花树、皮卡丘、汉诺塔、高达、星空等)

    1.小猪佩奇: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255, 155, 192), &qu ...

  4. 小黄鸭母公司在港招股书失效,留给德盈控股和许夏林的时间不多了

    B.Duck(小黄鸭)母公司招股书宣告"失效".11月4日,贝多财经从港交所了解到,德盈控股国际有限公司(下称"德盈控股")的招股书已经被标注为"失效 ...

  5. ofo小黄车已彻底无法登录;初代 iPhone 拍出 6.3 万美元天价;Linux 6.3 合并了硬件噪声工具|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  6. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  7. 纯CSS3画出小黄人并实现动画效果

    前言 前两天我刚发布了一篇CSS3实现小黄人动画的博客,但是实现的CSS3动画是基于我在站酷网找到的一张小黄人的jpg格式图片,并自己用PS抠出需要实现动画的部分,最后才完成的动画效果.但是,其实我的 ...

  8. 堆中的路径 (25 分)

    7-17 堆中的路径 (25 分) 将一系列给定数字插入一个初始为空的小顶堆H[].随后对任意给定的下标i,打印从H[i]到根结点的路径. 输入格式: 每组测试第1行包含2个正整数N和M(≤1000) ...

  9. 1045 快速排序 (25 分)

    1045 快速排序 (25 分) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 ...

最新文章

  1. client中周期性边界_HFSS中周期性边界条件的设置
  2. Android 动态Tab分页效果实现
  3. 【图像分类】没有人工收银,吃饭买单全自动化,是谁的功劳?
  4. 依赖注入在 dotnet core 中实现与使用:1 基本概念
  5. 代码补全_AI加持,Kite增加智能代码补全功能:减少一半操作,实时补全
  6. 组合数学 —— 康托展开
  7. 1042 mysql57_一次处理DB2宕机的实战经历(SQL1042C )
  8. cogs577. 蝗灾(CDQ)
  9. 为什么美女不愿意过苦日子?
  10. p40_数据交换方式
  11. java 如何执行dig 命令_linux dig 命令使用方法
  12. 国产CAM究竟水平如何?看完测试我震惊了
  13. 操作系统和各类编辑器的豆沙绿设置
  14. HDU6638 Snowy Smile
  15. MarkDown支持Emoji表情
  16. hdmi怎么支持2k分辨率_为什么显示器闪瞎眼 HDMI线版本有讲究
  17. 机器学习自然语言处理之英文NLTK(代码+原理)
  18. 兽音译者iOS APP,支持iPhone、iPad、Mac~
  19. 飞腾CPU服务器系统安装问题
  20. Hive Later View用法

热门文章

  1. 常用正则表达式-IP地址
  2. 按键自加自减的c语言数码管编程,8位共阴数码管动态扫描自增自减
  3. html5画图作品,10款最佳HTML5绘图工具
  4. MATLAB 色图函数绘制多彩图形
  5. CSS小练习4——w3School导航栏
  6. 机电一体化PLC毕业设计、课程设计案例分享/液压、电梯、洗衣机、送料控制、步进电动机、装瓶流水线、大小球分拣传送、饮料罐装、自动售货机、立体车库、洗衣机、喷泉、机械手、卧式镗床、温度控制、供水系统……
  7. 国标流媒体服务器可以接入海康摄像头吗?是否会有断流问题?
  8. 工具 | Codeblock下载与安装及使用
  9. 计算机常见故障排除 2017,Windows的十大常见故障和解决方法
  10. ReflectASM => Java 高性能反射