P1598 垂直柱状图

题目描述

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入格式

四行字符,由大写字母组成,每行不超过100个字符

输出格式

由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

输入输出样例

输入 #1
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
输出 #1
                            *
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

说明/提示

每行输出后面不允许出现多余的空格。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N = 26,M = 110;
int main(){
	char a[M];
	int aa[N];
	memset(aa,0,sizeof aa);//这个置零搞了我好一会儿,这里不置为0,判断最大次数会有问题
	for(int i = 0;i < 4;i++){
		gets(a);
		int n = strlen(a);
		for(int j = 0;j < n;j++)	
			if(a[j] >='A' && a[j]<='Z'){
				int c;
				c = a[j] - 'A';
				aa[c]++;
			}
	}
	int maxn = 0;
	for(int i = 0;i < 26;i++){
		maxn = max(maxn,aa[i]);//找出出现次数最多的
	}

	for(int i = maxn;i > 0;i--)//从最大的情况往下输出
	{
		for(int j = 0;j < 26;j++)
		{
			if(aa[j] >= i) cout << "* ";//如果当前的次数大于的等于我们的i就*,也就是一个aa[j]可能会被判断很多遍
			else cout << "  ";
		}
		puts("");
	}	

	for(int i = 0;i < 26;i++) printf("%c ",i + 'A');
	return 0;
}

  

原文地址:https://www.cnblogs.com/luyuan-chen/p/11670300.html