有的题解是错的,我也是服了,贴个AC代码出来

回复帖子

@fightingCQ 2019-05-27 20:42 回复
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
//这个是对的。。。
using namespace std;

char c1[120];
int a[50],maxn=0;
int main() {
    for(int i=0;i<4;i++) {
        gets(c1);
        for(int i=0;c1[i]!='\0';i++) {
            if('Z'<c1[i] || c1[i]<'A')
                continue;
            a[c1[i]-'A']++;
        }
    }
    for(int i=0;i<26;i++) {    //计算高度maxn
        maxn=max(a[i],maxn);
    }
    for(int i=maxn;i>=1;i--) {    //反向盖楼
        int l=0,flag=0;
        for(int j=0;j<26;j++) {     //j为当前判断的位置,l为上一次输出的位置
            if(a[j]==i) {
                if(flag==0) {
                    //flag为0说明没有输出过‘*’
                    //     *
                    // A B C 当前位置为2,上一次输出‘*’位置为0,空格数(2-1)*2=4个
                    for(int z=0;z<j-l;z++) {
                        cout<<"  ";
                    }
                } else {
                    //输出过'*',那么就少输出一个空格,可以理解为有一个空格被‘*’占了
                    //  *   *
                    //  A B C 当前位置为2,上一次输出‘*’位置为0,空格数(2-1)*2-1=3个
                    for(int z=1;z<(j-l)*2;z++) {
                        cout<<' ';
                    }
                }
                //cout<<' ';多空格会W,我测试过
                if(flag==0)
                    flag=1;
                l=j;
                cout<<'*';
                a[j]--;
            }
        }
        cout<<endl; //需要换行,没有会W.......
    }
    cout<<"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";
    return 0;
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。