物件導向程式設計︱HW10

繪製走勢圖

題目敘述

請實作一程式,此程式可以不斷地要求使用者輸入多組資料,輸入的第一列有一個整數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;
} 
最後更新 Oct 17, 2024 18:00 +0800