ACACWAWAAC,求助!
查看原帖
ACACWAWAAC,求助!
373226
justinjia楼主2020/10/8 15:35

代码:

#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
2020/10/8 15:35
加载中...