1 条题解
-
0
【深基6.习8】垂直柱状图
解题思路
读四行文字,统计 A~Z 次数并找最大高度。从最高层到第 1 层逐行绘制:某字母次数不小于当前层则输出星号,否则空格,列间一个空格。每行删除右侧多余空格,最后输出字母行。
正确性说明
第 h 层在某列画星号当且仅当该列柱高至少 h,故从顶到底构成准确柱状图;删除右侧空格满足输出要求而不影响有效列。
易错点
输入可能包含空格标点,只统计大写字母;不能用 >> 仅读一个词;每行末尾不留空格。
复杂度
输入长 L、最高频次 H,时间 O(L+26H),空间 O(L+26)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int cnt[26] = {}; string s; for (int i = 0; i < 4; i++) { getline(cin, s); for (char c : s) if (c >= 'A' && c <= 'Z') cnt[c - 'A']++; } int H = *max_element(cnt, cnt + 26); for (int h = H; h >= 1; h--) { string row; for (int i = 0; i < 26; i++) { if (i) row += ' '; row += (cnt[i] >= h ? '*' : ' '); } while (!row.empty() && row.back() == ' ') row.pop_back(); cout << row << "\n"; } for (int i = 0; i < 26; i++) { if (i) cout << " "; cout << char('A' + i); } cout << "\n"; return 0; }
- 1