zoukankan      html  css  js  c++  java
  • P1598 垂直柱状图

    P1598 垂直柱状图

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

    输入格式
    四行字符,由大写字母组成,每行不超过100个字符

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

    输入输出样例
    输入
    THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
    THIS IS AN EXAMPLE TO TEST FOR YOUR
    HISTOGRAM PROGRAM.
    HELLO!
    输出

                                *
                                *
            *                   *
            *                   *     *   *
            *                   *     *   *
    *       *     *             *     *   *
    *       *     * *     * *   *     * * *
    *       *   * * *     * *   * *   * * * *
    *     * * * * * *     * * * * *   * * * *     * *
    * * * * * * * * * * * * * * * * * * * * * * * * * *
    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


    说明/提示
    每行输出后面不允许出现多余的空格。

     1 解法1:
     2 
     3 #include<bits/stdc++.h>
     4 using namespace std;
     5 int main()
     6 {
     7     /*思路:
     8         1:使用桶排序,记录每个字符串出现的次数
     9         2:找到次数的组大值,然后从最大值 到1 遍历  i
    10         3:每次遍历的时候,找到这里面字符 出现次数 和 i相等 ,str+"* ";
    11         4:同时字符出现的个数-1
    12         5:不相等的 str+="  ";最后将字符串存到vector里面
    13         6:加上最后一行字符;遍历输出vector<string>
    14     */
    15     int data[27]={0};
    16     string str;
    17     for(int i=0;i<4;i++){
    18          getline(cin,str);
    19          for(int j=0;j<(int)str.size();j++){
    20             if(str[j]>='A'&&str[j]<='Z')
    21                data[str[j]-'A']++;//统计个数
    22 
    23          }
    24     }
    25 
    26     int Max=0;//得到这里面的最大值
    27     for(int i=0;i<26;i++){
    28         Max=max(Max,data[i]);
    29     }
    30     vector<string> v;
    31     for(int i=Max;i>=1;i--){//从最大值 到1 遍历
    32         str="";
    33         int id=-1;//最远的字符 和当前i个数一样的字符
    34         for(int j=0;j<26;j++){//找出来这个26字母里面,
    35             if(data[j]==i){
    36                 id=max(id,j);
    37             }
    38         }
    39         //然后从0-id遍历 统计 *
    40         for(int j=0;j<=id;j++){
    41             if(data[j]==i){
    42                 str+="* ";
    43                 data[j]--;//要让数量减1
    44             }
    45             else str+="  ";//两个空格
    46         }
    47         v.push_back(str);//都放进字符串里面,一直到最后一个i==1
    48     }
    49     str="";
    50     for(char ch='A';ch<='Z';ch++){//加上最后一行的字符
    51         str=str+ch+" ";
    52     }
    53     v.push_back(str);//遍历输出
    54     for(int i=0;i<(int)v.size();i++){
    55          cout<<v[i]<<endl;
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/12028413.html
Copyright © 2011-2022 走看看