[洛谷P1598]垂直柱状图

准备一个二维\(char\)数组\(o\),用来预填写好要输出的字符,最后一并输出

输出前判断一下每行最后一个非空字符在哪里

具体看代码

Code

#include <cstdio>
#include <cstring>
char ch,o[500][60];
int i,j,r,cnt[30]/*标字母出现次数*/,max;
int main()
{
    for (ch=getchar(); ch!=-1; ch=getchar()) // ch==-1代表读到了输入的末尾
    if (ch >= 'A' && ch <= 'Z') // 如果读到的是一个大写字母
    {
        i = ch-'A';
        ++cnt[i]; // 统计每个字母出现了多少次
        if (cnt[i] > max) max = cnt[i]; // 更新表格的最大高度
    }
    memset(o, ' ', sizeof(o)); // 把数组o中的元素全置为空格
    for (i=0; i<26; ++i) //预状填输出数组
    {
        o[0][i*2] = 'A'+i;
        for (j=1; j<=cnt[i]; ++j) o[j][i*2] = '*';
    }
    for (i=max; i>=0; --i) //输出数组
    {
        for (r=50; o[i][r]==' '; --r); //求第i行最后一个非空字符在哪里
        for (j=0; j<=r; ++j) printf("%c", o[i][j]);
        printf("\n");
    }
}

猜你喜欢

转载自www.cnblogs.com/lyfoi/p/9190313.html
今日推荐