阿巴斯卡王國有一天遭受鄰國的攻擊。阿巴斯卡王國開啟了鐵牆防空系統,因為資源有限,請你幫忙寫一個程式,判斷該如何最有效防禦來襲的飛彈。
範例測資
範例輸入 | 範例輸出 |
---|---|
第一行有 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 * |
解題思路
使用判斷式判斷 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
你好神喔