zoukankan      html  css  js  c++  java
  • 洛谷 P1598 垂直柱状图【字符串】

    题目描述

    写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

    输入输出格式

    输入格式:

    四行字符,由大写字母组成,每行不超过72个字符

    输出格式:

    由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

    输入输出样例

    输入样例#1: 复制
    THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
    THIS IS AN EXAMPLE TO TEST FOR YOUR
    HISTOGRAM PROGRAM.
    HELLO!
    
    输出样例#1: 复制
                                *
                                *
            *                   *
            *                   *     *   *
            *                   *     *   *
    *       *     *             *     *   *
    *       *     * *     * *   *     * * *
    *       *   * * *     * *   * *   * * * *
    *     * * * * * *     * * * * *   * * * *     * *
    * * * * * * * * * * * * * * * * * * * * * * * * * *
    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
    

    说明

    每行输出后面不允许出现多余的空格。

    【分析】:注意数组要开大一点!一路扫过去,把所有单词出现的次数记录下来,然后模拟一个输出。

    【代码】:

    #include<cstdio>
    #include<bits/stdc++.h>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int cnt[500];//定义计数数组
    string a;
    int main()
    {
        int i,j,n,maxn=0;
        //char a[200];
        for(i=0;i<4;i++)
        {
            getline(cin,a);//gets读入
           // n=strlen(a);
            for(j=0;j<a.length();j++)
                if(a[j]>='A'&&a[j]<='Z')
                    cnt[a[j]-'A']++;//统计字符出现次数
        }
        for(i=0;i<26;i++)
            maxn=max(maxn,cnt[i]);//最多次数(最高柱状图)
        for(i=maxn;i>0;i--)
        {
            for(j=0;j<26;j++)
                if(cnt[j]>=i)
                    printf("* ");
                else
                    printf("  ");//模拟,是可以输出的就输出*,否则跳过
            printf("
    ");
        }//换行
        /*for(i=0;i<26;i++)
            printf("%c ",i+'A');//输出a~z*/
        for(char i='A';i<'Z';i++)
        cout << i << " ";//输出A-Y,后面都有一个空格
        cout << "Z";//输出Z,后面没有空格
    }
    模拟
    #include <iostream>
    #include <cstring>
    #include <map>
    using namespace std;
    int main()
    {
        string s;//输入变量
            int i,j,len,max=0;char k;//len长度,max为最多数(高度)
        map<char,int> zm;//定义一个char到int的map变量,存储字母出现个数
        for (k='A';k<='Z';k++) zm[k]=0;//A~Z分别设初值为0
        for (i=0;i<4;i++)//4行
        {
            getline (cin,s);//读取一行
            len=s.size();///求取长度
            for (j=0;j<len;j++) zm[s[j]]++;//每个字母个数加一
        }
        for (k='A';k<='Z';k++) if (max<zm[k]) max=zm[k];//求高度
        for (;max;max--)
        {
            for (k='A';k<='Z';k++) if (max<=zm[k]) cout<<"* ";else cout<<"  ";//若该高度该字母达到,则输出* ;否则输出  ;
            cout<<endl;//换行
        }
        for (k='A';k<='Z';k++) cout<<k<<' ';//看各位输出都可复杂,直接这样不就行了吗(从A 到Z )
        return 0; 
    }
    View Code 2
  • 相关阅读:
    Kubernetes实战:高可用集群的搭建和部署
    华为云MVP程云:知识化转型,最终要赋能一线
    支持60+数据传输链路,华为云DRS链路商用大盘点
    关于单元测试的那些事儿,Mockito 都能帮你解决
    深入原生冰山安全体系,详解华为云安全服务如何构筑全栈安全
    云小课|ModelArts Pro 视觉套件:零代码构建视觉AI应用
    FLINK重点原理与机制:内存(1)task之间的数据传输
    FLINK重点原理与机制:内存(2)网络流控及反压机制剖析(一)
    FLINK重点原理与机制:状态(3)两阶段提交
    FLINK重点原理与机制:状态(2)Flink的检查点算法CHECKPOINT
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7730705.html
Copyright © 2011-2022 走看看