【洛谷】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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章