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--;
}
思路
先明確幾個點:
- blackList[N]和size都被聲明為了靜態變量,但還未給他們賦初值,所以先將它們初始化。
- Group(int num, bool bSign)中,若bSign為true則說明要拉進黑名單啦,則需要調用addToList(int num)函數,每個函數的作用要明確。

浙公網安備 33010602011771號