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;
}

POJ 2136 Vertical Histogram 打印特殊图形,布布扣,bubuko.com

时间: 07-31

POJ 2136 Vertical Histogram 打印特殊图形的相关文章

POJ 2136 Vertical Histogram

题意:按样例那样模拟…… 解法:模拟…… 代码: #include<stdio.h> #include<iostream> #include<algorithm> #include<string> #include<string.h> #include<math.h> #include<limits.h> #include<time.h> #include<stdlib.h> #include<

打表格,字符串处理,POJ(2136)

题目链接:http://poj.org/problem?id=2136 水题WA了半天,结果是数组开小了. #include <stdio.h> #include <string.h> char s[1005]; int num[26]= {0}; int main() { for(int i=0; i<4; i++) { gets(s); int len=strlen(s); for(int j=0; j<len; j++) { if(s[j]>='A'&

C语言打印各种图形

C语言中用循环可以打印出各种图形 1 直角三角形(靠右直立):部分代码 int i,j; for (i=0; i<6; i++) { for (j=6;j>i ;j-- ) { printf(" "); } for (j=0; j<=i; j++) { printf("*"); } printf("\n"); } 运行效果: 还有各种直角三角形就不一一介绍了. 2.等腰三角形(直立)部分代码如下: int i,j; for (i

Java打印M图形(二维数组)——(九)

对于平面图形输出集合图形与数字组合的,用二维数组.先在Excel表格中分析一下,找到简单的规律.二维数组的行数为行高,列数为最后一个数大小. 对于减小再增大再减小再增大的,可以用一个boolean标志其是增加还是减小状态,减到最小时将其标志设为相反的并改变这时的初值大小. 效果: Excel中分析 Java代码: 1 package Java_Test; 2 3 public class PrintM { 4 5 /* 6 7 3 7 8 2 4 6 8 9 1 5 9 10 平面图形(二维数组

用python打印各种图形

#用python打印出直角三角形:   1 #!/usr/bin/env python   2 # coding=utf-8   3 i = 0   4 while i < 5:   5     j = 0   6     while j <= i:   7         print "*",   8         j+=1   9     print ""  10     i+=1                 输出效果如下: *  * *  *

POJ 2136

水水更健康 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string.h> #include <queue> using namespace std; int LetC[30]; char str[85]; int main(){ memset(LetC,

(周六赛) Vertical Histogram

题意:统计字母的个数,以“*”号输出 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 int main() 5 { 6 char str[4][100]; 7 char map[100][100]; 8 int i,j; 9 int a[100]; 10 while(gets(str[0])) 11 { 12 memset(a,0,sizeof(a)); 13 memset(map,' '

【POJ2136】Vertical Histogram(简单模拟)

比较简单,按照样例模拟就好!~ 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <cctype> 6 #include <cmath> 7 #include <algorithm> 8 #include <numeric> 9 #include <vector>

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京