c++.docx
- 文档编号:14585828
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:13
- 大小:17.10KB
c++.docx
《c++.docx》由会员分享,可在线阅读,更多相关《c++.docx(13页珍藏版)》请在冰点文库上搜索。
c++
ProblemA:
图形计数与求面积
TimeLimit:
1Sec MemoryLimit:
128MB
Submit:
844 Solved:
567
[Submit][Status][WebBoard]
Description
定义三个类:
Shape、Circle和Square,其中Shape为抽象类,包括:
1.用于记录Shape类及其子类对象(即图形)个数的静态数据成员。
2.构造函数与析构函数。
3.获得图形个数的静态成员函数staticintgetNumOfShapes(),以及
4.求图形面积的纯虚函数getArea()。
类Circle是Shape类的子类,包括:
1.用于记录Circle类对象(即圆)个数的静态数据成员。
2.表示半径的double类型数据成员。
3.构造函数和析构函数。
4.重写的基类函数getArea(),用于求圆的面积,其中圆周率取值为3.14。
5.用于获得圆个数的静态成员函数staticintgetNumOfCircles()。
类Square也是Shape类的子类,包括:
1.用于记录Square类对象(即正方形)个数的静态数据成员。
2.表示边长的double类型数据成员。
3.构造函数和析构函数。
4.重写的基类函数getArea(),用于求正方形的面积。
5.用于获得正方形个数的静态成员函数staticintgetNumOfSquares()。
注意:
所有用于记录个数的静态成员只增不减。
Input
第1行N>0,表示有N个测试用例。
每个测试用例分2部分:
第1部分是1个字符C或者S,表示产生一个圆或者正方形;第2部分是一个实数,是圆的半径或正方形的边长。
Output
见样例。
其中面积输出2位小数。
SampleInput
2
C1.1
S2.34
SampleOutput
numOfShapes=0,numOfCircles=0,numOfSquares=0
Ashapeiscreated!
Acircleiscreated!
Area=3.80
Acircleiserased!
Ashapeiserased!
Ashapeiscreated!
Asquareiscreated!
Area=5.48
Asquareiserased!
Ashapeiserased!
numOfShapes=2,numOfCircles=1,numOfSquares=1
HINT
AppendCode
append.cc,
#include
#include
usingnamespacestd;
classShape{
public:
staticinta;
Shape()
{
a++;
cout<<"Ashapeiscreated!
"< } virtual~Shape() { cout<<"Ashapeiserased! "< } staticintgetNumOfShapes() { returna; } virtualdoublegetArea()=0; }; classCircle: publicShape{ public: doubleb; staticinta1; Circle(doubleaa=0): b(aa) { a1++;cout<<"Acircleiscreated! "< } ~Circle() { cout<<"Acircleiserased! "< } doublegetArea() { return3.14*b*b; } staticintgetNumOfCircles() { returna1; } }; classSquare: publicShape{ public: doublec; staticinta2; Square(doubleaa=0): c(aa) { a2++;cout<<"Asquareiscreated! "< } ~Square() { cout<<"Asquareiserased! "< } doublegetArea() { returnc*c; } staticintgetNumOfSquares() { returna2; } }; intShape: : a=0; intCircle: : a1=0; intSquare: : a2=0; intmain() { intcases; chartype; doubledata; Shape*shape; cin>>cases; cout<<"numOfShapes="< : getNumOfShapes(); cout<<",numOfCircles="< : getNumOfCircles(); cout<<",numOfSquares="< : getNumOfSquares()< for(inti=0;i { cin>>type>>data; switch(type) { case'C': shape=newCircle(data); break; case'S': shape=newSquare(data); break; } cout<<"Area="< (2)< deleteshape; } cout<<"numOfShapes="< : getNumOfShapes(); cout<<",numOfCircles="< : getNumOfCircles(); cout<<",numOfSquares="< : getNumOfSquares()< } ProblemB: 重载字符的加减法 TimeLimit: 1Sec MemoryLimit: 128MB Submit: 788 Solved: 474 [Submit][Status][WebBoard] Description 定义一个字符类Character,只有一个char类型的数据成员。 重载它的+、-、<<和>>运算符,其中+、-的第二个操作数是int类型的整数n。 “+”用于返回以当前字符之后的第n个字符为属性值的对象,“-”用于返回当前字符之前的第n个字符为属性值的对象。 如样例所示。 Input 第1行N>0表示测试用例个数。 每个测试用包括1个字符(小写英文字母)和1个int类型的整数。 Output 输出有N行,每行输入对应一行输出,每行输出包括对应输入字符之后的第n个字符,以及该字符之前的第n个字符。 如样例中第2个用例输入字符是“a”,整数是“1”,那么“a”之后的第1个字符是”b“,"a"之前的第1个字符是”z“;注意: 输入的整数可能是负数。 SampleInput 3 a0 a1 a-1 SampleOutput aa bz zb HINT AppendCode append.cc, #include usingnamespacestd; classCharacter{ public: chare; friendistream&operator>>(istream&,Character&); friendcharoperator+(Character&,int); friendcharoperator-(Character&,int); }; istream&operator>>(istream&is,Character&e) { is>>e.e; returnis; } charoperator+(Character&e,inta2) { return'a'+(26+a2%26+e.e-'a')%26; } charoperator-(Character&e,inta2) { return'a'+(26+e.e-a2%26-'a')%26; } intmain() { intcases,data; Characterch; cin>>cases; for(inti=0;i { cin>>ch; cin>>data; cout<<(ch+data)<<""<<(ch-data)< } } ProblemC: 求平均年龄 TimeLimit: 1Sec MemoryLimit: 128MB Submit: 1038 Solved: 595 [Submit][Status][WebBoard] Description 定义一个Persons类,用于保存若干个人的姓名(string类型)和年龄(int类型),定义其方法 voidaddAPerson(string,int) 用于添加1个人的信息; doublegetAveAge() 用于获取所有人的平均年龄。 Input 第1行N>0表示有N个测试用例。 每个测试用例包括1个人的姓名及其年龄。 Output 所有人的平均年龄。 见样例。 SampleInput 5 Zhang10 Wang20 Li30 Zhao40 Zhou50 SampleOutput 30.00 HINT AppendCode append.cc, #include #include #include usingnamespacestd; classPersons { private: vector inta; longs; public: Persons() { s=a=0; } voidaddAPerson(stringss,intaa) { m.push_back(ss); a+=aa; s++; } doublegetAveAge() { return(double)a/s; } }; intmain() { intcases,age; stringname; Personspersons; cin>>cases; for(inti=0;i { cin>>name>>age; persons.addAPerson(name,age); } cout< (2)< } ProblemD: STL——表达式求值 TimeLimit: 1Sec MemoryLimit: 128MB Submit: 1752 Solved: 949 [Submit][Status][WebBoard] Description 给出一个表达式,求出其值。 表达式中只存在+、-、*、三种运算,我们假设表达式是正确的, 且不存在除数为零的情况。 Input 第一行输入一个正整数n(1<=n<=30),表示有表达式n个数(每个数均小于100),表达式中只有数值(都是大于零的数) 和运算符(包括+、-、*、=四种运算符,其中=只在表达式最后,表示一个表达式输出结束,且整个表达式不存在空格) Output 表达式的值(表达式的值不会超出double的范围并保留两位小数) SampleInput 5 1*2*3*4*5= 5 5-1-2+3+4= SampleOutput 120.00 9.00 HINT 使用STL的stack容易实现。 AppendCode #include #include #include usingnamespacestd; intmain(){ stack stack intm; while(cin>>m){ for(intj=0;j doublet;charc; cin>>t>>c;e.push(t);f.push(c); } f.pop(); doubles=0; for(intj=0;j if(j==m-1){s+=e.top();e.pop();break;} if(f.top()=='+'){s+=e.top();e.pop();f.pop();continue;} if(f.top()=='-'){ s=s-e.top(); e.pop();f.pop();continue; } if(f.top()=='*'){doublet=e.top();e.pop();f.pop();t=t*e.top();e.pop();e.push(t);continue;} } cout.precision(4); cout< : fixed)< (2)< } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+