解题思路:
1.利用while循环不断读入一个字符,然后创建一个num数组用下标来计算每个字母出现的次数
2.统计完次数之后,找到出现最多的字母次数,因为打印的行数取决于最大值
3.然后创建循环,从最大值开始遍历,枚举每一个字母的次数,如果该字母的次数大于等于i,则输出* 否则的话打印两个空格(当字母没有到达该次数的时候,要打印空格,腾出位置)
4.最后打印最后一行的字母
- #include
- using namespace std;
- int num[30];
- int main()
- {
- char ans;
- while(cin>>ans)//不断读入一个字符
- {
- if(ans>='A'&&ans<='Z')//如果是大写字母的话
- num[ans-'A']++;//桶排序计数
- }
-
- int max=0;//找到字母出现次数的最大值
- for(int i=0;i<=25;i++)
- if(num[i]>max)
- max=num[i];
-
- for(int i=max;i>=1;i--)//从最大值开始遍历
- {
- for(int j=0;j<=25;j++)//枚举每一个字符
- {
- if(num[j]>=i)//如果该字符出现的次数大于等于i
- cout<<"* ";//打印*和空格
- else
- cout<<" ";//否则,打印两个空格
- }
- cout<
//换行 - }
-
- for(int i=1;i<=26;i++)//输出最下方的一行字母
- {
- cout<<(char)(i+64)<<" ";
- }
- return 0;
- }