oop练习(第13周)

体育俱乐部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;
}
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值