说明:
1.输出的相邻字符间有一个空格。
2.最后一行的26个大写字母每次必须输出。
3.大写字母A所在的第一列前没有空格。
这一题我的思路很简单,全部输入,然后写一个桶排。然后从桶排最高的字母开始,写个循环挨个往下搜索。只要这个字母出现的次数大于循环i,就输出。最后一行单独输出。
代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int s[26];
4 int main()
5 {
6 int j,n,maxn=0;
7 string a;
8 for(int i=1;i<=4;i++)
9 {
10 getline(cin,a);
11 n=a.size();
12 for(int j=0;j<n;j++)
13 {
14 if(a[j]>='A'&&a[j]<='Z') s[a[j]-'A']++;
15 }
16 }
17 for(int i=0;i<26;i++)maxn=max(maxn,s[i]);
18 for(int i=maxn;i>0;i--)
19 {
20 for(j=0;j<26;j++)
21 {
22 if(s[j]>=i&&s[j]!=25) cout<<"* ";
23 if(s[j]<i&&s[j]!=25) cout<<" ";
24 if(a[i]>=i&&s[j]==25) cout<<"*";
25 if(a[i]<i&&s[j]==25) cout<<" ";
26 }
27 printf("\n");
28 }
29 for(int i=0;i<26;i++) printf("%c ",i+'A');
PS:
这一道题其实我磕了很久都没做出来,原因嘛……大致的思路都有,每个需要注意的点也都挨个儿检查过了,但就是AC不了。最后上了一下洛谷,看了一篇大佬和我的思路比较相似的题解,才找出了我错误的那一个点。修改了几次之后,我的代码才终于AC了。说起来也是一段艰辛的故事。希望不会做这道题的朋友们不会像我这样。
(疫情复发,注意身体健康)