首页 > 代码库 > POJ 2136 Vertical Histogram 打印特殊图形

POJ 2136 Vertical Histogram 打印特殊图形

根据题目要求打印出需要的输出格式。

这算是些趣味题目了,题目本身不难,要说难点就是考如何优雅地去编程了,主要是考编程基础功力。

而且好像测试系统不是十分严格,并不判断后面多余的空格,按题目要求是需要严格去掉后面多余的空格的。

处理这个问题就需要多点代码了。

下面看我使用一个额外的数组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;
}