【洛谷】P1598 垂直柱状图

题目描述

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

输入格式

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

输出格式

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

输入样例

THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!

输出样例

                            *
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
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<string>
using namespace std;
int a['Z'+1]={0};
int maxx;
void fun(char *p)
{
	int i;
	for(i=0;p[i];i++)
	{
		if(p[i]>='A' && p[i]<='Z')
		{
			a[p[i]]++;
			if(a[p[i]]>maxx) maxx=a[p[i]];
		}
	}
}
int main()
{
	int i;
	char s[101];
	for(i=0;i<4;i++)
	{
		gets(s);
		fun(s);
	}
	for(;maxx;maxx--)
	{
		for(int j='A';j<='Z';j++)
		{
			if(a[j]==maxx)
			{
				printf("* ");
				a[j]--;
			}
			else printf("  ");
		}
		printf("\n");
	}
	for(int i='A';i<='Z';i++) printf("%c ",(char)i);
	return 0;

}
发布了38 篇原创文章 · 获赞 4 · 访问量 1640

猜你喜欢

转载自blog.csdn.net/qq_15989473/article/details/103393122
今日推荐