【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

說明

每行輸出後面不允許出現多餘的空格。

剛看見這個題目的時候感覺頭很大,不知從何入手,但是過了一會仔細想想,也不難。

題目其實就是統計四行字符中,26個英文字母的個數而已,剛開始用c++的cin進行輸入,但是忽略了cin不能喫掉空格,後改成getline(cin,s);對了(記得加頭文件string)!這個題的輸出可把我迷的不行,後來覺得用二維數組輸出比較方便,行數由字母的最大值決定,列數自然是26。用temp標記最大值,每次減1,來觀察何時輸出"* ",何時輸出"  ",注意輸出*字符後需要加一個空格,不輸出*時需要輸出兩個空格。

代碼實現:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	string s;
	int a[26];
	memset(a,0,sizeof(a));
	int n=4;
	while(n--){
		getline(cin,s);
		for(int i=0;i<s.size();i++){
			a[s[i]-'A']++;
		}
	}
	int maxi=a[0],temp=0;
	for(int i=1;i<26;i++)
		maxi=a[i]>maxi?a[i]:maxi;
	temp=maxi;
	for(int i=0;i<maxi;i++){
		for(int j=0;j<26;j++){
			if(a[j]>=temp)
				cout<<"* ";
			else
				cout<<"  ";
		}
		temp--;
		cout<<"\n";
	}
	cout<<"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";
	return 0;
}

 

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