代码:
#include"iostream"
#include"stdio.h"
#include"string"
using namespace std;
int main(void){
string a;
int letter[26]={0};
while(getline(cin,a))
for(int i=0;i<a.size();i++)
if(a[i]>='A'&&a[i]<='Z')
letter[a[i]-'A']++;
int max=letter[0];
for(int i=1;i<26;i++)
if(letter[i]>max)
max=letter[i];
int last[max];//这样可以知道什么时候应该打空格,什么时候不应该打空格
for(int i=0;i<max;i++)
for(int j=25;j>=0;j--)//多层循环有TLE的风险,但我无法想出更好的思路了
if(letter[j]>=i){
last[i]=j;
break;//只跳出一层循环
}
for(int i=max;i>0;i--){
for(int j=0;j<26;j++){
if(letter[j]>=i)
printf("*");
else
printf(" ");
if(j==last[i])
break;//避免打印多余的空格
printf(" ");
}
printf("\n");
}
for(int i=0;i<26;i++){
printf("%c",i+'A');
if(i!=25)
printf(" ");
}
return 0;
}
输入:(测试点#3)
HAO DU YOU DU?
NI HAO!
WHAT THIS?
A B C D E F G H I J K L M N.
输出:
* *
* * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * * * * * *
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