R6-4 2018Final静态成员(黑名单)
分数 10
作者 fzu
单位 福州大学
怡山小学生物组是公认的熊孩子天堂,他们每天都在做各种尝试,如: 强迫蚕宝宝吃各种不同的菜叶,把小狗和小白鼠关进一个笼子里,重复输入流浪狗记录等等。忍无可忍的黄老师决定往成员信息里添加一项黑名单,限制黑名单中同学的单独活动,以保证生物组的日常管理秩序。
黑名单的增加来自两个时刻,一个是在增加新成员时,根据班主任的建议,直接将同学拉入黑名单,另一个是根据同学在组内的行为,由黄老师将其拉入。
黑名单的减小也有两个时刻,一个是黄老师将某位同学拉出,还有一个是黑名单已经满了,且需要拉入新的人员,此时,在黑名单中时间最长的成员,自动地被拉出黑名单。
输入:
输入时,先输入当前任务类型:
任务类型为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;
}
输入样例:
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(); // 显示黑名单列表
};
// 实现displayList()函数,显示黑名单列表
void Group::displayList() {
if (size == 0) cout << "NULL BLACKLIST!" << endl; // 如果黑名单为空,则输出NULL BLACKLIST!
else {
for (int i = 0; i < size - 1; i++) cout << blackList[i] << ' '; // 输出黑名单成员编号
cout << blackList[size - 1] << endl; // 输出最后一个黑名单成员编号并换行
}
}
int Group::size = 0; // 初始化静态成员变量size为0
int Group::blackList[N] = { 0 }; // 初始化静态成员变量blackList数组为0
Group::Group() { // 默认构造函数
}
Group::Group(int num, bool bSign) // 带参构造函数
{
this->num = num; // 初始化成员编号
if (bSign == true) // 如果bSign为真
Group::addToList(num); // 将成员添加到黑名单
}
void Group::addToList(int num) // 将成员添加到黑名单
{
// 黑名单已满,移除最年长成员
if (size == N) // 如果黑名单已满
{
removeFromList(blackList[0]); // 移除最年长成员
}
blackList[size++] = num; // 将成员添加到黑名单
}
void Group::removeFromList(int num) // 从黑名单中移除成员
{
int pos = 0; // position位置
for (pos = 0; pos < size; pos++) // 查找要移除的成员位置
{
if (blackList[pos] == num) // 如果找到了要移除的成员
break; // 退出循环
}
for (int i = pos; i < size - 1; i++) // 移除要删除成员后,将后面的成员前移
{
blackList[i] = blackList[i + 1]; // 将后一个成员前移
}
size--; // 黑名单大小减一
}
int main() {
int i, j, k, num, task, count = 0;
Group g[100]; // 创建Group对象数组
cin >> task; // 输入任务编号
while (task != 0) { // 当任务编号不为0时执行循环
switch (task) {
case 1: cin >> num >> k; // 输入成员编号和k值
if (k == 999) { // 如果k为999
g[count++] = Group(num, true); // 将成员添加到黑名单
cin >> task; // 输入下一个任务编号
}
else {
g[count++] = Group(num, false); // 将成员添加到黑名单
task = k; // 将k值赋给task
}
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; // 程序结束
}
标签:R6,task,Group,int,2018Final,黑名单,num,成员
From: https://www.cnblogs.com/yesno233233/p/18113439