ITSA 202404 #4:防禦系統敵人來襲

阿巴斯卡王國有一天遭受鄰國的攻擊。阿巴斯卡王國開啟了鐵牆防空系統,因為資源有限,請你幫忙寫一個程式,判斷該如何最有效防禦來襲的飛彈。

範例測資

範例輸入範例輸出
第一行有 1 個正整數 N (1 ≤ N ≤ 100),表不共有 N 顆飛彈來襲。
接下來有 N 行。每行資料會有 2 個正整數 D 和 S (1 ≤ S ≤ 4),D 代表欲守護的國土範圍之邊長 (3 ≤ D ≤ 9)。
判斷 S 表示飛彈來襲方向:
如 S = 1 時,表示飛彈從左前方來,所以你的鐵牆防空系統佈置要呈現右上左下。
當 S = 2 時,表示飛彈從右前方來,所以你的鐵牆防守系統佈置要呈現左上右下。
當 S = 3 時,表示飛彈從右邊來,所以你的鐵牆防守系統置要聚集到右邊。
當 S = 4 時,表示飛彈從左邊來,所以你的鐵牆防守系統布置要聚集到左邊。

請印出國土與鐵牆防守系統的佈置狀況,以*代表鐵牆防空系統,以 x 代表國士。
每個*和 x 中間都相隔一個空白,每行最後必須有換行字元。
2
3 1
4 3
x x *
x * x
* x x
x x x *
x x x *
x x x *
x x x *
ITSA 202404 #4 範例測資

解題思路

使用判斷式判斷 S 是多少,如果是斜著走的話就是預設一個變數為 D-1 或是 0,每次 For迴圈跑到這個變數的時候就輸出「*」,並且將變數 -1 或 +1。如果 S = 2,每一行只輸出一次「*」,可以使用布林值來確認。

範例程式碼-ITSA 202404 #4:防禦系統敵人來襲

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    for (int i = 0; i<N; i++)
    {
        int D, S;
        cin >> D >> S;
        if (S == 1)
        {
            int count = D-1;
            for (int j = 0; j<D; j++)
            {
                for (int k = 0; k<D; k++)
                {
                    if (k != 0) cout << " ";
                    if (k == count)
                    {
                        count--;
                        cout << "*";
                    }
                    else cout << "x";
                }
                cout << "\n";
            }
        }
        else if (S == 2)
        {
            int count = 0;
            for (int j = 0; j<D; j++)
            {
                bool ok = true;
                for (int k = 0; k<D; k++)
                {
                    if (k != 0) cout << " ";
                    if (k == count && ok)
                    {
                        ok = false;
                        count++;
                        cout << "*";
                    }
                    else cout << "x";
                }
                cout << "\n";
            }
        }
        else if (S == 3)
        {
            for (int j = 0; j<D; j++)
            {
                for (int k = 0; k<D; k++)
                {
                    if (k != 0) cout << " ";
                    if (k == D-1) cout << "*";
                    else cout << "x";
                }
                cout << "\n";
            }
        }
        else
        {
            for (int j = 0; j<D; j++)
            {
                for (int k = 0; k<D; k++)
                {
                    if (k != 0) cout << " ";
                    if (k == 0) cout << "*";
                    else cout << "x";
                }
                cout << "\n";
            }
        }
    }
}

//ITSA 202404 #4
//Dr. SeanXD

1 則留言

發佈留言