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

时间: 2024-10-06 12:16:25

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<

蓝桥杯 算法训练 ALGO-145 4-1打印下述图形

算法训练 4-1打印下述图形 时间限制:1.0s   内存限制:256.0MB 问题描述 使用循环结构打印下述图形,打印行数n由用户输入.打印空格时使用"%s"格式,向printf函数传递只包含一个或多个空格的字符串" ",下同. 样例输入 一个满足题目要求的输入范例.例: 5 样例输出 与上面的样例输入对应的输出.例: 数据规模和约定 输入数据中每一个数的范围. 例:0<n<20. 题目解析: 本道题共两种思路,由于 n 的范围很小(0 < n

20140314 java练习题-打印各种图形

1.打印直角三角形 import java.util.Scanner; public class AgeDemo { public static void main(String[] args){ //打印一个倒立的直角三角形如下: //**** //*** //** //* Scanner sc = new Scanner(System.in); System.out.println("请输入边长:"); int a = sc.nextInt(); for(int j=a;j>

打表格,字符串处理,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

1108: 打印数字图形(函数专题)

题目描述 从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形.要求在程序中定义并调用如下函数:PrintSpace(m)用来输出m个空格:PrintDigit(m)来输出一行中的数字串"12...m...21"(该行中的最大数字是m).函数原型如下: void PrintDigit(int m): void PrintSpace(int m); 对于C/C++代码的提交,本题要求必须通过定义PrintSpace函数.PrintDigit函数和main函数实现,否则,返回编译错误.

zzuli oj 1108 打印数字图形

题意分析:从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形.要求在程序中定义并调用如下函数:PrintSpace(m)用来输出m个空格:PrintDigit(m)来输出一行中的数字串"12...m...21"(该行中的最大数字是m).函数原型如下:  void PrintDigit(int m):  void PrintSpace(int m); 解题思路:编写两个函数,发现图形规律与打印实心菱形相近,利用两个循环来控制每一行的数字规律.代码实现: 1 #include<

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                 输出效果如下: *  * *  *