題目敘述
請實作一程式,此程式可以不斷地要求使用者輸入多組資料,輸入的第一列有一個整數N代表以下有多少組測試資料。每組測試資料一列,包含一個僅含有 R,F,C 字元的字串,長度最少 1,最大 50。當資料內的 N<= 0 時,即代表結束程式。
你的任務是畫出股票的走勢圖。在某個時間點股價可能是上揚(Rise),下跌(Fall),或持平(Constant)。我們會給你一個僅包含R,F,C的字串,代表一連串時間點的股價(R代表上揚,F代表下跌,C代表持平)。請你用字元’/’(斜線,slash),’\’(反斜線,backslash),’_’(底線,underscore)畫出股價走勢圖。
對每組測試資料首先輸出這是第幾組測試資料。然後輸出股價走勢圖。如同你在Sample Output中所見,包含了 x 軸及 y 軸。x 軸的長度應該比走勢圖多一個字元,並且在 y 軸和走勢圖一開始之間應該有一格的空白,以及走勢圖的最低點需在x軸上方一格處。每一列的最後都不應該有空白字元的出現,也不要輸出不必要的列。x 軸一定是出現在圖形的最下方一列。
每組測試資料後亦輸出一列空白列。
範例
1
2
3
4
5
6
7
|
RCRFCRFFCCRRC
Case #1:
| _
| _/\_/\ /
| / \__/
+---------------
|
1
2
3
4
5
6
7
|
CFF
Case #2:
| _
| \
| \
+-----
|
1
2
3
4
5
6
7
8
|
FFFCCRRCCCRR
Case #3:
| /
| \ ___/
| \ /
| \__/
+--------------
|
參考答案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
unordered_map<char, char> umap = {{'R', '/'},
{'F', '\\'},
{'C', '_'}};
int main() {
int n; string s;
while(cin >> n and n > 0) {
for(int k=1; k<=n; k++) {
int cnt = 0;
vector<pair<int, char>> v;
cin >> s;
for(const auto& x: s) {
if(x == 'F') cnt--;
v.emplace_back(cnt, umap[x]);
if(x == 'R') cnt++;
}
int maxY = max_element(v.begin(), v.end())->first;
int minY = min_element(v.begin(), v.end())->first;
cout << "Case #" << k << ":" << endl;
for(int i=maxY; i>=minY; i--) {
cout << "| ";
for(auto [y, c]: v) {
cout << ((i == y)? c: ' ');
}
cout << endl;
}
cout << '+' << string(v.size() + 2, '-') << '\n' << endl;
}
}
return 0;
}
|