P1598

  无语的是,我以为题目条件的‘在任何一行末尾不要打印不需要的多余空格’意思是每一行都只能到最后一个 '*' 出现就换行,然后用了 '',结果怎么都不过,于是看了题解,发现别人都没管这个 = =!!,于是我就去掉'',就绿了。

  下面代码就是加上判断'没有多余空格'的,去掉所有出现 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;
}

  

  

原文地址:https://www.cnblogs.com/darkchii/p/9640893.html