zoukankan      html  css  js  c++  java
  • 2018Final静态成员(黑名单)

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

    输入样例:

    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!
    

    代码

    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 j;
    	for(int i=0;i<N;i++)
    	{
    		if(blackList[i]==num)
    		{
    			j=i;
    			break;
    		}
    	}
    	for(int i=j;i<N-1;i++)
    		blackList[i]=blackList[i+1];
    	blackList[N-1]=0;
    	size--;
    }
    

    思路

    先明确几个点:

    1. blackList[N]和size都被声明为了静态变量,但还未给他们赋初值,所以先将它们初始化。
    2. Group(int num, bool bSign)中,若bSign为true则说明要拉进黑名单啦,则需要调用addToList(int num)函数,每个函数的作用要明确。
  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/fzujly/p/14838657.html
Copyright © 2011-2022 走看看