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 }
  • 相关阅读:
    Making Pimpl Easy
    OpenCV学习资源
    openCV基础学习(1)
    fl2440原始linux代码的启动日志
    《s3c2440+lan91c111 vxworks驱动调试》疑惑
    使用并行的方法计算斐波那契数列 (Fibonacci)
    [译] SolidWorks的发展历史(1994~2007)
    翻译介绍一点CAD发展的历史
    使用fopen的两点注意事项
    四元数(Quaternions)简介
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/12028413.html
Copyright © 2011-2022 走看看