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


    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;
    }
    
  • 相关阅读:
    Python 极简教程(十)集合 set
    Python 极简教程(九)元组 tuple
    Python 极简教程(七)列表 list
    Python 极简教程(八)字符串 str
    DevOps实践之一:基于Docker构建企业Jenkins CI平台
    kubernetes实践之一:kubernetes二进制包安装
    Linux挖矿病毒 khugepageds详细解决步骤
    kubernetes实践之五:深入理解Service及内部DNS搭建
    kubernetes实践之四:深入理解控制器(workload)
    kubernetes实践之三:深入理解Pod对象
  • 原文地址:https://www.cnblogs.com/xiao-qingjiang/p/12892414.html
Copyright © 2020-2023  润新知