洛谷 P1598 垂直柱狀圖 題解
阿新 • • 發佈:2017-10-03
style return span ret mat () 輸入輸出 字符 來安
輸入樣例#1:
此文為博主原創題解,轉載時請通知博主,並把原文鏈接放在正文醒目位置。
題目鏈接 :https://www.luogu.org/problem/show?pid=1598
題目描述
寫一個程序從輸入文件中去讀取四行大寫字母(全都是大寫的,每行不超過72個字符),然後用柱狀圖輸出每個字符在輸入文件中出現的次數。嚴格地按照輸出樣例來安排你的輸出格式。
輸入輸出格式
輸入格式:四行字符,由大寫字母組成,每行不超過72個字符
輸出格式:由若幹行組成,前幾行由空格和星號組成,最後一行則是由空格和字母組成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
輸入輸出樣例
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 垂直柱狀圖 題解