1. 程式人生 > >洛谷 P1598 垂直柱狀圖 題解

洛谷 P1598 垂直柱狀圖 題解

style return span ret mat () 輸入輸出 字符 來安

此文為博主原創題解,轉載時請通知博主,並把原文鏈接放在正文醒目位置。

題目鏈接 :https://www.luogu.org/problem/show?pid=1598

題目描述

寫一個程序從輸入文件中去讀取四行大寫字母(全都是大寫的,每行不超過72個字符),然後用柱狀圖輸出每個字符在輸入文件中出現的次數。嚴格地按照輸出樣例來安排你的輸出格式。

輸入輸出格式

輸入格式:

四行字符,由大寫字母組成,每行不超過72個字符

輸出格式:

由若幹行組成,前幾行由空格和星號組成,最後一行則是由空格和字母組成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

輸入輸出樣例

輸入樣例#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

說明

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

分析:

不要聽這個說明亂講...我費了好大力氣去空格,結果PE。

我的理解是在每行的最後一個*之後不能出現空格,然而實際上是在Z列之後不能出現空格。

這算什麽多余的空格啊mmp。

看代碼,毫無難度的純模擬。

AC代碼:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 const int MAXN = 300000;
 6 char s[MAXN];
7 int cnt[30],mx; 8 //cnt記錄每種字母出現了多少次 9 //mx記錄柱狀圖的最大高度 10 int main() 11 { 12 for(int i = 1;i <= 4;++ i) 13 { 14 gets(s); 15 for(int j = 0;j < strlen(s);++ j) 16 if(s[j] >= A && s[j] <= Z) 17 cnt[s[j]-A+1] ++; 18 } 19 for(int i = 1;i <= 26;++ i) 20 if(cnt[i] > mx) mx = cnt[i]; 21 for(int i = mx;i > 0;-- i) 22 { 23 for(int j = 1;j <= 26;++ j) 24 { 25 if(cnt[j] >= i) 26 printf("* "); 27 else 28 printf(" "); 29 } 30 printf("\n"); 31 } 32 for(int j = 0;j < 26;++ j) 33 { 34 printf("%c ",A+j); 35 } 36 return 0; 37 }

洛谷 P1598 垂直柱狀圖 題解