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)函数,每个函数的作用要明确。
  • 相关阅读:
    重新开始学习Linux
    2006:远离windows, 拥抱linux!
    适合做首页的网站: http://www.netvibes.com/
    netvibes出问题了,登陆不进去。
    推荐开源的rss阅读器rssreader 3.0,支持中文
    ubuntu的即时通讯gaim不错, 如何连qq呢?
    linux是否能把显示改为1024x768呢?
    通过IRC学习ubuntu很不错
    Firefox 扩展软件介绍(转载) Mozine 论坛
    几个有意思的网站
  • 原文地址:https://www.cnblogs.com/fzujly/p/14838657.html
Copyright © 2011-2022 走看看