P1598 垂直柱状图
题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过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
说明
每行输出后面不允许出现多余的空格。
题目链接:https://www.luogu.org/problemnew/show/1598
分析:(⊙o⊙)…贼恶心了,打印格式出错了好几次,GG
其实这道题很简单,就是注意细节就可以了,一路扫过去,把所有单词出现的次数记录下来,然后模拟一个输出。
输出其实最麻烦。
主要思路,求最大的,然后从底下或者最上面扫,当a-z中有字母个数达到现在已所指的数目,就输出,否则就输出空格~~~
没想到两个月没做题,水平掉了这么多,我看来还是得花点时间刷题了,准备准备打个蓝桥杯,希望有机会和大佬们在北京相见QAQ
下面给出AC代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[100]; 4 char s[100]; 5 int main() 6 { 7 int maxn=0; 8 for(int i=1;i<=4;i++) 9 { 10 gets(s); 11 int len=strlen(s); 12 for(int j=0;j<len;j++) 13 { 14 if(s[j]>='A'&&s[j]<='Z') 15 a[s[j]-'A'+1]++; 16 } 17 } 18 for(int i=1;i<=26;i++) 19 maxn=max(maxn,a[i]); 20 for(int t=maxn;t>0;t--) 21 { 22 for(int i=1;i<=26;i++) 23 { 24 if(a[i]>=t) 25 cout<<"*"<<" "; 26 else printf(" "); 27 } 28 cout<<endl; 29 } 30 for(int i=(int)'A';i<=(int)'Z';i++) 31 cout<<(char)i<<" "; 32 return 0; 33 }