# 題目: UVa 10800 - Not That Kind of Graph
# 題目說明
給一個由 R
、 F
、 C
組成的字串,使用 /
、 \
、 _
畫出圖表
R
: 上升一格F
: 下降一格C
: 維持同一格
INPUT:
輸入一個整數 T
,代表測資數
每筆測資輸入一個字串
OUTPUT:
使用 /
、 \
、 _
畫出的圖表
# 解題方法
先計算此圖表的最大高度,存入變數 len
宣告一個二維陣列,將中點設為 len
,上下各擁有 len
個空間,長度則是輸入的字串長度 + 1
接著處理輸入字串的符號,在對應位置填入 /
、 \
、 _
最後再按照格式輸出
# 參考程式碼
#include <iostream> | |
#include <string> | |
#include <vector> | |
using namespace std; | |
static auto fast_io = [] | |
{ | |
ios::sync_with_stdio(false); | |
cout.tie(nullptr); | |
cin.tie(nullptr); | |
return 0; | |
}(); | |
int main() | |
{ | |
int T, cnt = 0; | |
string str; | |
cin >> T; | |
while (T--) | |
{ | |
cin >> str; | |
int len = 0, tmp = 0; | |
for (auto& c : str) | |
{ | |
if (c == 'R') ++tmp; | |
else if (c == 'F') --tmp; | |
len = max(len, max(tmp, -tmp)); | |
} | |
vector<vector<char>> V(len * 2 + 1, vector<char>(str.size() + 1, ' ')); | |
int x = len, y = 0; | |
for (auto& c : str) | |
{ | |
if (c == 'R') V[x++][y++] = '/'; | |
else if (c == 'F') V[--x][y++] = '\\'; | |
else V[x][y++] = '_'; | |
} | |
cout << "Case #" << ++cnt << ":\n"; | |
for (int i = V.size() - 1; i >= 0; --i) | |
{ | |
while (!V[i].empty()) | |
{ | |
if (V[i].back() == ' ') V[i].pop_back(); | |
else break; | |
} | |
if (!V[i].empty()) | |
{ | |
cout << "| "; | |
for (auto& j : V[i]) cout << j; | |
cout << "\n"; | |
} | |
} | |
cout << "+"; | |
for (int i = 0; i < str.size() + 2; ++i) cout << '-'; | |
cout << "\n\n"; | |
} | |
} |