1. 程式人生 > >百練2800:垂直直方圖題解

百練2800:垂直直方圖題解

2800:垂直直方圖

總時間限制: 
1000ms 
記憶體限制: 
65536kB
描述

輸入4行全部由大寫字母組成的文字,輸出一個垂直直方圖,給出每個字元出現的次數。注意:只用輸出字元的出現次數,不用輸出空白字元,數字或者標點符號的輸出次數。

輸入
輸入包括4行由大寫字母組成的文字,每行上字元的數目不超過80個。
輸出
輸出包括若干行。其中最後一行給出26個大寫英文字母,這些字母之間用一個空格隔開。前面的幾行包括空格和星號,每個字母出現幾次,就在這個字母的上方輸出一個星號。注意:輸出的第一行不能是空行。
樣例輸入
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
來源
翻譯自USACO 2003 February Orange的試題。
  • 檢視 
  • 提交 
  • 統計 
  • 提示 
  • 提問
    • 程式碼:
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[26],max = 0;
    char str[100];
    int main(){
    	for(int i = 0; i < 4; ++i){
    		fgets(str,100,stdin);
    		for(int j = 0; str[j] != '\0'; ++j){
    			if(str[j] >= 'A' && str[j] <= 'Z'){
    				a[str[j] - 'A'] ++;
    				if(a[str[j] - 'A'] > max) 
    					max = a[str[j] - 'A'];
    			}
    		}
    	}
    	for(int i = max; i > 0; i--){
    		for(int j = 0; j < 26; ++j){
    			if(a[j] >= i) printf("* ");
    			else printf("  ");
    		}
    		putchar('\n');
    	}
    	puts("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;
    }