写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过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 }