无语的是,我以为题目条件的‘在任何一行末尾不要打印不需要的多余空格’意思是每一行都只能到最后一个 '*' 出现就换行,然后用了 '',结果怎么都不过,于是看了题解,发现别人都没管这个 = =!!,于是我就去掉'',就绿了。
下面代码就是加上判断'没有多余空格'的,去掉所有出现 space 的地方就可以了。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = a; i < b; i++) #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b)) #define index(a) (a - 'A') #define transUpp(a) (a - 32) #define transLow(a) (a + 32) #define ll long long #define PB push_back int gcd(int a, int b){return b == 0 ? a : gcd(a%b, a);} const int N = 1000010; int main(int n, char**v) { char letter[26], s[N]; int m = -1, spaces; rep(i, 0, 26) letter[i] = 0; for (int i = 0; i < 4; i++) { fgets(s, N, stdin); for (int j = 0; s[j]; j++) if (s[j] >= 'A' && s[j] <= 'Z') { letter[index(s[j])] += 1; m = max(m, letter[index(s[j])]); } } for(int i = m; i > 0; i--) { spaces = 0; rep(j, 0, 26) { if (letter[j] == i) { spaces = 0; letter[j] -= 1; cout << "* "; } else if (i > 0) cout << " "; spaces += 1; } rep(j, 0, space) cout << ''; cout << ' '; } rep(i, 0, 26) cout << (char)(65 + i) << ' '; return 0; }