根据题目要求打印出需要的输出格式。
这算是些趣味题目了,题目本身不难,要说难点就是考如何优雅地去编程了,主要是考编程基础功力。
而且好像测试系统不是十分严格,并不判断后面多余的空格,按题目要求是需要严格去掉后面多余的空格的。
处理这个问题就需要多点代码了。
下面看我使用一个额外的数组spaceHeight[ALP_LEN[来解决这个问题,做到半个多余的空格符也没有。
#include <cstdio>
#include <string.h>
const int MAX_N = 75;
const int ALP_LEN = 26;
const int LINE_N = 4;
short height[ALP_LEN];
short spaceHeight[ALP_LEN];
char chs[MAX_N];
inline int max(int a, int b) { return a > b ? a : b; }
inline void getAlphaCount(char str[])
{
int i = 0;
while (str[i])
{
if ('A' <= str[i] && str[i] <= 'Z') height[str[i]-'A']++;
i++;
}
}
int main()
{
while (gets(chs))
{
memset(height, 0, sizeof(height));
getAlphaCount(chs);
for (int i = 0; i < LINE_N-1; i++)
{
gets(chs);
getAlphaCount(chs);
}
spaceHeight[ALP_LEN-1] = height[ALP_LEN-1];
for (int i = ALP_LEN-2; i >= 0; i--)
{
spaceHeight[i] = max(spaceHeight[i+1], height[i]);
}
for (int h = spaceHeight[0]; h > 0; h--)
{
for (int j = 0; j < ALP_LEN; j++)
{
if (spaceHeight[j] < h) break;
if (j > 0) putchar(' ');
if (height[j] < h) putchar(' ');
else putchar('*');
}
putchar('\n');
}
for (int i = 0; i < ALP_LEN; i++)
{
if (i > 0) putchar(' ');
putchar(char(i+'A'));
}
putchar('\n');
}
return 0;
}