首页 > 其他分享 >R6-4 2018Final静态成员(黑名单)

R6-4 2018Final静态成员(黑名单)

时间:2024-04-03 20:24:59浏览次数:19  
标签:R6 task Group int 2018Final 黑名单 num 成员

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

相关文章

  • KingbaseES V8R6集群运维案例之---同城双中心switchover案例
    KingbaseESV8R6集群运维案例之---同城双中心switchover案例案例说明:在同城双中心执行switchover在线切换后,双中心架构保持不变。适用版本:KingbaseESV8R6集群架构:一、切换前集群节点状态如下所示,切换前集群的主库(Primary)位于同城灾备中心,现在执行switchover在线切......
  • KingbaseESV8R6等待事件之LWLockBuffer_IO
    说明当并发会话尝试访问同一页面时,等待其他进程完成其输入/输出(I/O)操作时,就会发生LWLock:BufferIO事件。其目的是将同一页读取到共享缓冲区中。等待事件发生过程每个sharedbuffer都有一个与LWLock:BufferIO等待事件关联的I/O锁,每次都必须在共享缓冲池外检索块。此锁用于处理......
  • SQL注入原理及步骤以及黑名单绕过方式
    原理mysql5.0以上的版本存在一个information_schema数据库,information_schema数据库包含3个表如下:步骤判断是否存在sql注入:分别输入不同的id值:——有结果:1’and1=1#——无结果:1’and1=2#——出错:1'——正常:1''(两个单引号)换成双引号同理。判断查询结果有多少列:—......
  • KingbaseES V8R6集群运维案例之---single-pro模式备份
    案例说明:KingbaseESV8R6集群物理备份配置参数_target_db_style,可选single或cluster或single-pro。single对应单机模式的目标数据库实例,cluster对应集群模式的目标数据库实例,single-pro对应集群模式的每个DB节点独立备份。本案例详细描述集群架构在singl-pro模式下的备份。适用......
  • KingbaseES V8R6集群运维案例之---数据库实例initdb后配置
    案例说明:KingbaseESV8R6集群在数据库实例启动时需加载repmgr插件,并且具有集群管理的用户esrep和存储元数据的数据库esrep库;但在手工initdb新的实例后,默认的实例将不包含repmgrextension及esrep库和esrep用户,需要手工配置,完善集群管理应用。适用版本:KingbaseESV8R6一、默认......
  • KingbaseES V8R6集群运维案例之---备节点恢复为单实例库
    KingbaseESV8R6集群运维案例之---备节点恢复为单实例库案例说明:在生产环境中,手工将集群节点恢复为单实例节点,操作可以分为两步。第一步,先将节点从repmgr管理中注销,脱离集群的管理;第二步,从流复制中拆分节点,成为单实例节点。适用版本:KingbaseESV8R6集群架构:ID......
  • KingbaseES V8R6集群案例之---同城双中心集群部署
    案例说明:本案例描述了在KingbaseESV8R6下部署同城双中心集群的过程,通过脚本的方式执行执行部署,部署方式和普通集群脚本部署基本一致。适用版本:KingbaseESV8R6集群架构:[kingbase@node101~]$cat/etc/hosts192.168.1.101node1192.168.1.102node2192.168.1.103......
  • KingbaseES V8R6集群运维案例之---PGPASSWORD变量导致esrep用户连接主库失败
    案例说明:KingbaseESV8R6集群,在备库执行clone时,esrep用户认证失败,导致clone失败。适用版本:KingbaseESV8R6一、问题现象如下所示,在执行备库clone是,esrep认证失败:备库sys_log日志:(esrep用户认证失败)二、问题分析对于KingbaseESV8R6集群,esrep的用户通过~/.encpwd建立认证(......
  • KingbaseES V8R6集群运维案例之---备库register故障
    案例说明:据现场实施人员说,备库执行了clone,启动数据库服务,执行'repmgrstandbyregister'后,无法将备库register到集群。适用版本:KingbaseESV8R6一、问题现象如下图所示,执行'repmgrstandbyregister',register失败:二、问题分析1、repmgrstandbyregister分析如下图所示:......
  • KingbaseES集群运维案例之-- V8R3与V8R6集群wal函数应用
    案例说明:KingbaseESV8R3和V8R6集群在通过函数获取wal日志的相关信息时,两个版本的函数名称不同,本案例做了函数应用的对比和总结。适用版本:KingbaseESV8R3/R6一、KingbaseESV8R3相关函数Tips:在V8R3的版本,事务日志名称为xlog。1、查询数据库支持的函数test=#selectpron......