oop
体育俱乐部I(构造函数)
一个俱乐部需要保存它的简要信息,包括四项:名称(字符串),成立年份(整数),教练姓名(字符串)和教练胜率(0-100之间的整数)。用键盘输入这些信息后,把它们分两行输出:第一行输出名称和成立年份,第二行输出教练姓名和胜率。
输入样例:
Guanzhou 2006 Tom 92
输出样例:
Guanzhou 2006
Tom 92%
#include <iostream>
#include <string>
using namespace std;
class Coach{
string name;
int winRate;
public:
Coach(string n, int wr){
name=n; winRate=wr;
}
void show();
};
class Club{
string name;
Coach c;
int year;
public:
Club(string n1, int y, string n2, int wr);
void show();
};
int main(){
string n1, n2;
int year, winRate;
cin>>n1>>year>>n2>>winRate;
Club c(n1,year, n2, winRate);
c.show();
return 0;
}
Club::Club(string n1, int y, string n2, int wr):c(n2,wr){
name=n1;
year=y;
}
void Club::show(){
cout<<name<<" "<<year<<endl;
c.show();
}
void Coach::show(){
cout<< name <<" "<< winRate <<"%"<<endl;
}
2017final点的个数
幼儿园小班的小朋友开始学画画了,小明喜欢在白纸上画点点,请你帮他统计一下点的个数。请定义一个Point类,内有数据成员x,y表示点的坐标,还有一个静态数据成员count用于统计点的个数。并有若干成员函数,如构造函数、显示点的个数的函数showCount()等。
输入样例:
4 5
输出样例:
0
Point A: 4,5
1
Point B: 4,5
2
Point C: 0,0
3
Point D: 4,0
4
#include<iostream>
using namespace std;
class Point{
public:
static int count;
static int showCount(){
cout << count << endl;
return count;
}
int getX(){
return x;
}
int getY(){
return y;
}
Point(int a,int b){
x=a;
y=b;
count++;
}
Point(Point &a){
x=a.getX();
y=a.getY();
count++;
}
Point(){
x=0;
y=0;
count++;
}
Point(int a){
x=a;
y=0;
count++;
}
private:
int x;
int y;
};
int Point::count = 0;
int main(){
int x,y;
cin>>x>>y;
Point::showCount();
Point a(x,y);
cout<<"Point A: "<<a.getX()<<","<<a.getY()<<endl;
Point::showCount();
Point b(a);
cout<<"Point B: "<<b.getX()<<","<<b.getY()<<endl;
Point::showCount();
Point c;
cout<<"Point C: "<<c.getX()<<","<<c.getY()<<endl;
Point::showCount();
Point d(x);
cout<<"Point D: "<<d.getX()<<","<<d.getY()<<endl;
Point::showCount();
return 0;
}
2018Final静态成员(黑名单)
怡山小学生物组是公认的熊孩子天堂,他们每天都在做各种尝试,如: 强迫蚕宝宝吃各种不同的菜叶,把小狗和小白鼠关进一个笼子里,重复输入流浪狗记录等等。忍无可忍的黄老师决定往成员信息里添加一项黑名单,限制黑名单中同学的单独活动,以保证生物组的日常管理秩序。
黑名单的增加来自两个时刻,一个是在增加新成员时,根据班主任的建议,直接将同学拉入黑名单,另一个是根据同学在组内的行为,由黄老师将其拉入。
黑名单的减小也有两个时刻,一个是黄老师将某位同学拉出,还有一个是黑名单已经满了,且需要拉入新的人员,此时,在黑名单中时间最长的成员,自动地被拉出黑名单。
输入:
输入时,先输入当前任务类型:
任务类型为1时,将加入新的学生记录;此时将输入学生的学号(假定新加入的学生肯定没有加入过),如果该学生应加入黑名单,则接着会多输入一个"999";
任务类型为2时,将某已有学生加入黑名单;此时将直接输入学生学号(假定不会将黑名单中已有的学生,再次加入黑名单);
任务类型为3时,将某些学生移出黑名单;此时将直接输入学生学号(假定这个学号肯定在黑名单中)。
任务类型为0时,结束输入。
输出:
在执行类型2和3任务时,将输出当前的黑名单中的学生学号,用空格间隔,输出顺序为学生被加入黑名单的顺序,先加入者在前。如果黑名单为空,输出"NULL BLACKLIST!".
输入样例:
1 102
1 345 999
1 123
2 102
1 333
2 333
2 123
3 102
3 123
3 333
0
输出样例:
345 102
345 102 333
102 333 123
333 123
333
NULL BLACKLIST!
#include <iostream>
using namespace std;
const int N=3;
class Group{
private:
int num;
static int blackList[N];
static int size;
public:
Group();
Group(int num, bool bSign);
static void addToList(int num);
static void removeFromList(int num);
static void displayList();
};
void Group::displayList(){
if(size==0) cout<<"NULL BLACKLIST!"<<endl;
else{
for(int i=0;i<size-1;i++) cout<<blackList[i]<<' ';
cout<<blackList[size-1]<<endl;
}
}
int Group::blackList[N] = { 0 };
int Group::size = 0;
Group::Group(){
num=0;
}
Group::Group(int num, bool bSign) {
if (bSign == true) {
Group::addToList(num);
}
}
void Group::addToList(int num) {
if (size == N) {
for (int i = 0; i < N - 1; i++) {
blackList[i] = blackList[i + 1];
}
blackList[N - 1] = num;
}
else {
blackList[size] = num;
size++;
}
}
void Group::removeFromList(int num) {
int ii=0;
for (ii = 0; ii < size; ii++) {
if (blackList[ii] == num) {
for (int jj = ii; jj < size - 1; jj++) {
blackList[jj] = blackList[jj + 1];
}
blackList[size - 1] = 0;
size--;
break;
}
}
}
int main(){
int i, j, k, num, task, count=0;
Group g[100];
cin>>task;
while(task!=0){
switch(task){
case 1: cin>>num>>k;
if(k==999) {
g[count++]=Group(num, true);
cin>>task;
}else{
g[count++]=Group(num, false);
task = k;
}
break;
case 2: cin>>num;
Group::addToList(num);
Group::displayList();
cin>>task;
break;
case 3: cin>>num;
Group::removeFromList(num);
Group::displayList();
cin>>task;
break;
}
}
return 0;
}
宿舍谁最高? (20分)
学校选拔篮球队员,每间宿舍最多有4个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类Student,有身高height,体重weight等。
输入格式:
首先输入一个整型数n (1<=n<=1000000),表示n位同学。
紧跟着n行输入,每一行格式为:宿舍号,name,height,weight。
宿舍号的区间为[0,999999], name 由字母组成,长度小于16,height,weight为正整数。
输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。
输入样例:
7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115
输出样例:
000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145
#include<bits/stdc++.h>
using namespace std;
class Student{
public:
int id;
string name;
int h = 0;
int w;
};
Student s[1000000];
int main(){
int n, p = 0;
cin >> n;
for (int i = 0; i < 1000000; i++)
s[i].id = i;
Student stu;
bool isendl = false;
for (int i = 0; i < n; i++){
cin >> stu.id >> stu.name >> stu.h >> stu.w;
if (stu.h > s[stu.id].h){
s[stu.id].name = stu.name;
s[stu.id].h = stu.h;
s[stu.id].w = stu.w;
p++;
}
}
for (int i = 0; i < 1000000; i++){
if (s[i].h == 0)
continue;
if (isendl) {
cout << endl;
}
isendl = true;
printf("%06d", s[i].id);
cout << ' ' << s[i].name << ' ' << s[i].h << ' ' << s[i].w;
}
return 0;
}
2017final游泳池过道造价 (20分)
有一个圆形游泳池,现在需要在其周围建一过道,并在其四周围上矩形栅栏,如图所示。若过道造价为20元/平方米。要求计算并输出过道的造价。请定义一个Circle类,内有私有数据成员radius表示半径,并有若干成员函数;定义一个Rectangle类,内有私有数据成员length、width表示长和宽,并有若干成员函数。(设圆周率PI = 3.14159,所有数据均为double类型)
输入格式:
输入一行数据a b c,分别表示游泳池半径、栅栏的长和宽。其中a>0,b>2a,c>2a。
输出格式:
对每一行的输入数据,输出过道的造价。
输入样例:
3 7 8
输出样例:
554.514
#include<bits/stdc++.h>
#define pi 3.14159
using namespace std;
class Circle{
private:
double radius;
public:
Circle(double);
double getr();
};
Circle::Circle(double a){
radius=a;
}
class Rectangle{
private:
double length;
double width;
public:
Rectangle(double,double);
double getl();
double getw();
};
Rectangle::Rectangle(double b,double c){
length=b;
width=c;
}
double Circle::getr(){
return radius;
}
double Rectangle::getl(){
return length;
}
double Rectangle::getw(){
return width;
}
int main(){
double a,b,c;
cin>>a>>b>>c;
Circle yuan(a);
Rectangle ju(b,c);
double k=ju.getl()*ju.getw()-yuan.getr()*yuan.getr()*pi;
cout<<k*20<<endl;
}
该日是该年的第几天 (10分)
定义一个日期类Date,内有数据成员年、月、日,另有成员函数:构造函数用于初始化数据成员,输出,闰年的判断。 编写主函数:创建日期对象,计算并输出该日是该年的第几天。 输入格式: 测试输入包含若干测试用例,每个测试用例占一行。当读入0 0 0时输入结束,相应的结果不要输出。
输入样例:
2006 3 5
2000 3 5
0 0 0
输出样例:(括号内为说明)
64 (2006年3月5日是该年的第64天)
65 (2000年3月5日是该年的第65天)
#include<bits/stdc++.h>
using namespace std;
class Date {
private:
int year, month, day, flag, sum;
public:
Date(int y, int m, int d){
year = y;
month = m;
day = d;
flag = 0;
sum = 0;
switch (month){
case 1: sum = 0; break;
case 2: sum = 31; break;
case 3: sum = 59; break;
case 4: sum = 90; break;
case 5: sum = 120; break;
case 6: sum = 151; break;
case 7: sum = 181; break;
case 8: sum = 212; break;
case 9: sum = 243; break;
case 10: sum = 273; break;
case 11: sum = 304; break;
case 12: sum = 334; break;
}
sum = sum + day;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
flag = 1;
}
if (flag == 1 && month > 2)
sum++;
}
void disp() {
cout << sum << endl;
}
};
int main() {
int y, m, d;
while (1) {
cin >> y >> m >> d;
if (y == 0 && m == 0 && d == 0)
break;
else {
Date r(y, m, d);
r.disp();
}
}
return 0;
}
队列操作 (10分)
请实现一个MyQueue类,实现出队,入队,求队列长度.
实现入队函数 void push(int x); 实现出队函数 int pop(); 实现求队列长度函数 int size();
输入格式:
每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。
输出格式:
对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。 对于操作3,请输出队列长度。 每个输出项最后换行。
输入样例:
5
3
2
1 100
3
2
输出样例:
0
Invalid
1
100
#include <bits/stdc++.h>
using namespace std;
class myqueue {
public:
void push(int x) {
a.push(x);
}
void pop() {
if (a.empty())
cout << "Invalid" << endl;
else {
cout << a.front() << endl;
a.pop();
}
}
void size() {
cout << a.size() << endl;
}
private:
queue<int>a;
};
int main() {
int n;
myqueue t;
cin >> n;
while (n--) {
int op;
cin >> op;
if (op == 1) {
int x;
cin >> x;
t.push(x);
}
if (op == 2) {
t.pop();
}
if (op == 3) {
t.size();
}
}
return 0;
}
计算全班学生C++课程的总成绩和平均成绩 (10分)
定义一个类Student,记录学生C++课程的成绩。要求使用静态数据成员或静态成员函数计算全班学生C++课程的总成绩和平均成绩。
输入格式:
输入5个不超过100的正整数,作为C++成绩。
输出格式:
在第一行中输出成绩的和,第二行输出平均成绩。
输入样例:
90 80 70 60 50
输出样例:
350
70
#include <bits/stdc++.h>
using namespace std;
class student {
public:
static int sum;
student(int x) {
score = x;
sum += x;
}
static int avg() {
return sum / 5;
}
private:
int score;
};
int student::sum = 0;
int main() {
for (int i = 0; i < 5; i++) {
int x;
cin >> x;
student a(x);
}
cout << student::sum << endl << student::avg() << endl;
return 0;
}
2018final世界杯也疯狂之球队积分计算 (20分)
这是一个世界杯赛场,有球队类,其中,队名、记录每场比分的数组、累计积分 是其三个私有数据成员;有两个成员函数,分别是根据各场比分计算累计积分、以及计算净胜球总和。请添加适当的构造函数。 积分计算规则是:胜者得三分,负者不得分,打平双方各得一分。
输入格式:
输入仅一行,表示这个球队信息,分别是 1或2(1表示该队是主队,2表示该队是客队)、若干场比分(主队进球数:客队进球数,场数小于20)。每项信息间以空格隔开。
输出格式:
输出一行,分别是该队的累计积分和净胜球数,两项信息间以空格隔开。
输入样例:
在这里给出一组输入。例如:
1 3:5 5:0 2:2 3:7
输出样例:
在这里给出相应的输出。例如:
4 -1
#include <bits/stdc++.h>
using namespace std;
class team {
public:
static int i;
void setname(int x) {
name = x;
}
void bifen(int x, int y) {
score[i][1] = x;
score[i][2] = x;
i++;
if (x > y && name == 1) {
jifen += 3;
}
if (x < y && name == 2) {
jifen += 3;
}
if (x == y) {
jifen += 1;
}
if (name == 1) {
jinsheng += x - y;
}
if (name == 2) {
jinsheng += y - x;
}
}
void display() {
cout << jifen << " " << jinsheng << endl;
}
private:
int name;
int score[25][3];
static int jinsheng ;
static int jifen ;
};
int team::jifen = 0;
int team::jinsheng = 0;
int team::i = 0;
int main() {
int x;
cin >> x;
team t;
t.setname(x);
int a, b;
char c;
while (cin >> a >> c >> b) {
t.bifen(a, b);
}
t.display();
return 0;
}