首页 > 其他 > 详细

oop第四次练习总结中提到的几道题

时间:2020-05-20 13:41:16      阅读:134      评论:0      收藏:0      [点我收藏+]

6-4 2018Final静态成员(黑名单) (20分)

怡山小学生物组是公认的熊孩子天堂,他们每天都在做各种尝试,如: 强迫蚕宝宝吃各种不同的菜叶,把小狗和小白鼠关进一个笼子里,重复输入流浪狗记录等等。忍无可忍的黄老师决定往成员信息里添加一项黑名单,限制黑名单中同学的单独活动,以保证生物组的日常管理秩序。
黑名单的增加来自两个时刻,一个是在增加新成员时,根据班主任的建议,直接将同学拉入黑名单,另一个是根据同学在组内的行为,由黄老师将其拉入。
黑名单的减小也有两个时刻,一个是黄老师将某位同学拉出,还有一个是黑名单已经满了,且需要拉入新的人员,此时,在黑名单中时间最长的成员,自动地被拉出黑名单。

输入:
输入时,先输入当前任务类型:
任务类型为1时,将加入新的学生记录;此时将输入学生的学号(假定新加入的学生肯定没有加入过),如果该学生应加入黑名单,则接着会多输入一个"999";
任务类型为2时,将某已有学生加入黑名单;此时将直接输入学生学号(假定不会将黑名单中已有的学生,再次加入黑名单);
任务类型为3时,将某些学生移出黑名单;此时将直接输入学生学号(假定这个学号肯定在黑名单中)。
任务类型为0时,结束输入。

输出:
在执行类型2和3任务时,将输出当前的黑名单中的学生学号,用空格间隔,输出顺序为学生被加入黑名单的顺序,先加入者在前。如果黑名单为空,输出"NULL BLACKLIST!".

函数接口定义:

请补全类Group

裁判测试程序样例:

#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 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;
}

以下是AC代码(可自行插入裁判函数对应位置)

int Group::size = 0;//静态成员变量要在类外初始化
int Group::blackList[N] = { 0 };
Group::Group() {}
Group::Group(int num, bool bSign) {
	if (bSign == true) {
		addToList(num);
	}
}
void Group::addToList(int num) {
	if (size < N) {
		blackList[size] = num;
		size++;
	}
	else {
		removeFromList(blackList[0]);
		blackList[size] = num;
		size++;
	}
}
void Group::removeFromList(int num) {
	int ii;
	for ( ii = 0; ii < N; ii++) {
		if (blackList[ii] == num) {
			break;
		}
	}
	for (ii = ii; ii + 1 < N; ii++) {
		blackList[ii] = blackList[ii + 1];
	}
	blackList[ii] = 0;
	size--;
}

7-1 宿舍谁最高? (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

以下为AC代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class student {
public:
	int num;//宿舍号
	int height;//身高
	int weight;//体重
	string name;//名字
	student() {}//无参类型构造函数
	student(int a,string d,int b, int c):num(a),height(b),weight(c),name(d){}//有参类型构造函数
	~student() {}
};
bool cmp(student a, student b) {
	if (a.num != b.num) {
		return a.num < b.num;
	}
	else {
		return a.height < a.height;
	}
}
int main() {
	int a, b, c;
	string d;
	int n;
	cin >> n;
	student* tt = new student[100];//无参类型构造函数初始化对象数组
	for (int i = 0; i < n; i++) {
		cin >> tt[i].num >> tt[i].name >> tt[i].height >> tt[i].weight;//使用数组循环的方式进一步初始化对象
	}
	sort(tt, tt + n, cmp);
	int i = 0;
	while (i < n) {
		int j = i + 1;
		while (tt[i].num == tt[j].num) {
			j++;
		}
		i = j;
		printf("%06d ", tt[j - 1].num);
		cout << tt[j - 1].name << " " << tt[j - 1].height << " " << tt[j - 1].weight << endl;
	}
	delete[]tt;
	return 0;
}

7-5 该日是该年的第几天 (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<iostream>
using namespace std;
class Date {
private:
	int year, month, date;
public:
	Date(int a, int b, int c) {//有参类型的构造函数
		year = a, month = b, date = c;
	}
	Date() {}//无参类型的构造函数
	~Date() {}
	int num();
};
int Date::num() {
	int tt = 0, k = 0;
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
		int a[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
		while (k<month-1) {
			tt += a[k];
			k++;
		}
		tt += date;
	}
	else {
		int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
		while (k < month - 1) {
			tt += a[k];
			k++;
		}
		tt += date;
	}
	return tt;
}
int main() {
	int x, y, z;
	int i;
	Date* p = new Date[100];//无参类型构造函数来构造对象数组
	for ( i = 0;;i++) {
		cin >> x >> y >> z;
		if (x == 0 && y == 0 && z == 0) {
			break;
		}
		p[i] = Date(x, y, z);//有参类型构造函数进一步初始化
	}
	int j = 0;
	while ( j < i ) {
		cout << p[j].num() << endl;
		j++;
	}
	delete[]p;
	return 0;
}

oop第四次练习总结中提到的几道题

原文:https://www.cnblogs.com/xiao-qingjiang/p/12892414.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!