洛谷 P1598 垂直柱状图

链接:https://www.luogu.org/problemnew/show/P1598

题目:

  题目描述

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

  输入输出格式

  输入格式:

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

  输出格式:

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

  输入输出样例

  输入样例#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

  说明

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

思路:

  

  思路清晰,读取四行数据,检索出现次数,通过数组保存一气呵成,我这里读取输入用的是getline,我觉得会好一点。

  (但是这题我debug了半天,最后才发现我少空格。。。。。。)

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 
 6 int word[27];
 7 
 8 int main()
 9 {
10     int max=0;
11     char a[105];
12     for(int i=0;i<4;i++)
13     {
14         cin.getline(a,105);
15         int n=strlen(a);
16         for(int j=0;j<n;j++)
17         {
18             if(a[j]>='A'&&a[j]<='Z')
19                 word[a[j]-'A']++;
20         }
21     }
22     for(int i=0;i<26;i++)
23         if(word[i]>max)
24             max=word[i];
25     for(int i=max;i>=1;i--)
26     {
27         for(int j=0;j<26;j++)
28         {
29             if(word[j]>=i)
30                 cout<<"* ";
31             else
32                 cout<<"  ";
33         }
34         cout<<endl;
35     }
36     for(int i=0;i<26;i++)
37         cout<<(char)('A'+i)<<" ";
38     return 0;
39 } 

  

原文地址:https://www.cnblogs.com/blogxjc/p/11156586.html