ZeroJudge A870: List Maker

許多程式設計任務的常見模式,是維護一個經常改變的項目清單,或者需要將輸入/輸出存到一個儲存裝置。而那些記錄的項目可能是一些等待批准的大學申請人。清單要能依照不同的指令,提供不同操作,像插入或刪除。

依照下面的功能定義寫一個程式,程式要提供能以下指令:增加、插入和移除

ADD X:將X加入於清單的最下面。這個指令必須能在空的清單上執行。

INSERT X N:將X加入N的前面。

REMOVE X:將X從清單中刪除。

X、N 只含大寫英文字元

範例測資

範例輸入範例輸出
EOF 輸入,輸入的項目不會重複出現,指令「SHOW」表示輸入結束。程式必須將清單以正確順序輸出,清單項目間以一個空白隔開
ADD NEVER
ADD COLLAR
INSERT CAT COLLAR
ADD DOG
ADD SCARES
INSERT ANYTHING CAT
REMOVE CAT
INSERT THAT SCARES
REMOVE COLLAR
INSERT WEAR ANYTHING
REMOVE DOG
ADD CAT
INSERT YOUR CAT
SHOW
NEVER WEAR ANYTHING THAT SCARES YOUR CAT

解題思路

可以利用 Vector 的 Push_Back 來處理 ADD 這個動作INSERT 可以開一個 For迴圈,把原本陣列的東西放到一個新的陣列,並且判斷目前的資料是否為要插入的資料,如果是的話就將指定的資料先 Push_Back 再將原本這個位置的資料做 Push_BackREMOVE 的道理也是和INSERT一樣。INSERT 和 REMOVE 完之後可以使用 Assign 將新的陣列複製到舊的陣列上。

範例程式碼-ZeroJudge A870: List Maker

#include <iostream>
#include <vector>
using namespace std;

int main() {
    string command;
    vector<string>v;
    while (cin >> command && command != "SHOW")
    {
        if (command == "ADD")
        {
            string str;
            cin >> str;
            v.push_back(str);
        }
        else if (command == "INSERT")
        {
            string X, N;
            cin >> X >> N;
            vector<string>tmp;
            for (int i = 0; i<v.size(); i++)
            {
                if (v[i] == N) tmp.push_back(X);
                tmp.push_back(v[i]);
            }
            v.clear();
            v.assign(tmp.begin(), tmp.end());
        }
        else
        {
            string str;
            cin >> str;
            vector<string>tmp;
            for(int i = 0; i<v.size(); i++)
            {
                if (v[i] != str) tmp.push_back(v[i]);
            }
            v.clear();
            v.assign(tmp.begin(), tmp.end());
        }
    }
    for (int i = 0; i<v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << "\n";
}

//ZeroJudge A870
//Dr. SeanXD

發佈留言