华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2084|回复: 9
打印 上一主题 下一主题

P1598 垂直柱状图

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-4-24 15:07:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1598
题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

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

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

  1. 输入输出样例
  2. 输入样例#1:
  3. THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
  4. THIS IS AN EXAMPLE TO TEST FOR YOUR
  5. HISTOGRAM PROGRAM.
  6. HELLO!
  7. 输出样例#1:
  8.                             *
  9.                             *
  10.         *                   *
  11.         *                   *     *   *
  12.         *                   *     *   *
  13. *       *     *             *     *   *
  14. *       *     * *     * *   *     * * *
  15. *       *   * * *     * *   * *   * * * *
  16. *     * * * * * *     * * * * *   * * * *     * *
  17. * * * * * * * * * * * * * * * * * * * * * * * * * *
  18. 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
  19. 说明
  20. 每行输出后面不允许出现多余的空格。
复制代码

回复

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
沙发
发表于 2018-7-2 09:33:42 | 只看该作者
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. string a,b,c,d,e="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";
  5. int i,j,n[26],maxn;
  6. int main()
  7. {
  8.     getline(cin,a);
  9.     getline(cin,b);
  10.     getline(cin,c);
  11.     getline(cin,d);
  12.     for(i=0; i<=50; i+=2)
  13.     {
  14.         for(j=0; j<a.size(); j++)
  15.             if(a[j]==e[i])n[i/2]++;
  16.         for(j=0; j<b.size(); j++)
  17.             if(b[j]==e[i])n[i/2]++;
  18.         for(j=0; j<c.size(); j++)
  19.             if(c[j]==e[i])n[i/2]++;
  20.         for(j=0; j<d.size(); j++)
  21.             if(d[j]==e[i])n[i/2]++;
  22.     }
  23.     for(i=0;i<=25;i++)if(n[i]>maxn)maxn=n[i];
  24.     for(i=maxn;i>0;i--)
  25.     {
  26.         for(j=0;j<26;j++)
  27.         if(n[j]>=i)
  28.         {
  29.             if(j!=25)cout<<"* ";
  30.             else cout<<"*";
  31.         }
  32.         else
  33.         {
  34.             if(j!=25)cout<<"  ";
  35.             else cout<<" ";
  36.         }
  37.         cout<<endl;
  38.     }
  39.     cout<<e;
  40. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
板凳
 楼主| 发表于 2018-7-2 15:45:37 | 只看该作者
  1. #include<iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. const int oo=99999999;
  5. string s; ///检查用
  6. char ch;
  7. int a[26]; ///统计每个字母出现的次数 a[0]是'A'出现的次数
  8. int main()
  9. {
  10.     int maxx=-oo; ///最大值
  11.     while (scanf("%c",&ch)!=EOF)   ///读入技巧
  12.     {
  13.         s=s+ch;///检查用
  14.         if (ch>='A' && ch<='Z')
  15.         {
  16.             a[ch-'A']++;   
  17.             if (a[ch-'A']>maxx) maxx=a[ch-'A'];
  18.         ///if (++a[ch-'A']>maxx) maxx=a[ch-'A'];
  19.         ///maxx=max(maxx,++a[ch-'A'])
  20.         }
  21.     }
  22.     ///cout<<s;  检查
  23.     for (int i=maxx; i>=1; i--)
  24.     {
  25.         for (ch='A'; ch<='Z'; ch++) if (a[ch-'A']>=i) cout<<"* ";
  26.             else cout<<"  ";
  27.         cout<<endl;
  28.     }
  29.     for (ch='A';ch<='Z'; ch++) cout<<ch<<' ';
  30.     return 0;
  31. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
地板
 楼主| 发表于 2018-7-2 16:20:17 | 只看该作者
1、EOF是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1:#define EOF (-1)。除了表示文件结尾,EOF还可以表示标准输入的结尾。因为有时候无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。

2、在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,可以是文本文件,也可以是标准输入stdin。在文本文件中,数据都是以字符的ASCII代码值的形式存放。对于普通文本,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。在windows平台,stdin输入流的EOF标志是 ctrl + z。在unix平台,stdin输入流的EOF标志是 ctrl + d。
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
5#
发表于 2018-7-8 15:29:51 | 只看该作者
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. string s;
  5. int i,j,d,maxn;
  6. char k;
  7. struct aaa{
  8.     int a;int b;
  9. }x[26];
  10. int main()
  11. {
  12.     for(i=0;i<=3;i++)
  13.     {
  14.         getline(cin,s);
  15.         for(j=0;j<=s.length()-1;j++)
  16.             if((s[j]>='A')&&(s[j]<='Z'))
  17.                 x[s[j]-'A'].a++;
  18.     }
  19.     for(i=0;i<=25;i++) x[i].b=i;
  20.     d=x[0].a;
  21.     maxn=0;for(i=0;i<=25;i++) maxn=max(x[i].a,maxn);d=maxn;
  22.     while(d>0)
  23.     {
  24.         for(i=0;i<=25;i++)
  25.         {
  26.             if(d<=x[i].a) cout<<'*';
  27.             else cout<<' ';
  28.             if(i!=25) cout<<' ';
  29.         }
  30.         d--;
  31.         cout<<endl;
  32.     }
  33.     for(k='A';k<='Z';k++) {cout<<k;if(k!='Z') cout<<' ';}
  34.     return 0;
  35. }
复制代码
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
6#
发表于 2018-7-8 15:30:15 | 只看该作者
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. string s;
  5. int i,j,d,maxn;
  6. char k;
  7. struct aaa{
  8.     int a;int b;
  9. }x[26];
  10. int main()
  11. {
  12.     for(i=0;i<=3;i++)
  13.     {
  14.         getline(cin,s);
  15.         for(j=0;j<=s.length()-1;j++)
  16.             if((s[j]>='A')&&(s[j]<='Z'))
  17.                 x[s[j]-'A'].a++;
  18.     }
  19.     for(i=0;i<=25;i++) x[i].b=i;
  20.     d=x[0].a;
  21.     maxn=0;for(i=0;i<=25;i++) maxn=max(x[i].a,maxn);d=maxn;
  22.     while(d>0)
  23.     {
  24.         for(i=0;i<=25;i++)
  25.         {
  26.             if(d<=x[i].a) cout<<'*';
  27.             else cout<<' ';
  28.             if(i!=25) cout<<' ';
  29.         }
  30.         d--;
  31.         cout<<endl;
  32.     }
  33.     for(k='A';k<='Z';k++) {cout<<k;if(k!='Z') cout<<' ';}
  34.     return 0;
  35. }
复制代码
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
7#
发表于 2018-7-29 19:54:54 | 只看该作者
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <map>
  6. #include <string>
  7. #include <vector>
  8. #include <queue>
  9. #include <stack>
  10. #include <cstdio>
  11. #include <cstdlib>
  12. using namespace std;
  13. char c;
  14. int t[26],i,j,all;
  15. int main()
  16. {
  17.         while(~scanf("%c",&c))
  18.                 if(c>='A' && c<='Z')
  19.                         t[c-'A']++;
  20.         for(i=0; i<=25; i++)
  21.                 if(t[i]>all)
  22.                         all=t[i];
  23.         for(i=all; i>=1; i--)
  24.         {
  25.                 for(j=0; j<=25; j++)
  26.                         if(t[j]==i)
  27.                                 printf("* "),t[j]--;
  28.                         else printf("  ");
  29.                 printf("\n");
  30.         }
  31.         for(i=0; i<26; i++)
  32.                 printf("%c ",i+'A');
  33.         return 0;
  34. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
8#
发表于 2018-8-1 20:44:50 | 只看该作者
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int letters[26],maxv;
  5. string s;
  6. int main()
  7. {
  8.     for(int i=1; i<=4; i++)
  9.     {
  10.         getline(cin,s);
  11.         for(int i=0; i<s.size(); i++)
  12.             if(s[i]<='Z's[i]>='A')letters[s[i]-'A']++;
  13.     }
  14.     maxv=*max_element(letters,letters+26);
  15.     while(maxv)
  16.     {
  17.         for(int i=0; i<26-1; i++)
  18.             if(letters[i]>=maxv)cout<<'*'<<' ';
  19.             else cout<<"  ";
  20.         if(letters[25]>=maxv)cout<<'*';
  21.         else cout<<' ';
  22.         cout<<endl;
  23.         maxv--;
  24.     }
  25.     for(int i=0; i<26-1; i++)cout<<char(i+'A')<<' ';
  26.     cout<<'Z';
  27.     return 0;
  28. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
9#
 楼主| 发表于 2019-3-24 09:17:53 | 只看该作者
  1. #include <iostream>
  2. using namespace std;
  3. string s,s1,s2,s3,s4;
  4. int a[26];
  5. char ch;
  6. int maxc,i,l,m;
  7. int main()
  8. {
  9.     getline(cin,s1);
  10.     getline(cin,s2);
  11.     getline(cin,s3);
  12.     getline(cin,s4);
  13.     s=s1+s2+s3+s4;
  14.     l=s.size();
  15.     cout<<s<<endl;
  16.     for (i=0; i<=25; i++) a[i]=0;
  17.     for (i=0; i<=l-1; i++)
  18.     {
  19.         ch=s[i];
  20.         if (ch<='Z' && ch>='A') a[ch-'A']++;
  21.     }
  22.     /*cout<<endl;
  23.     for (ch='A';ch<='Z';ch++) {cout<<a[ch-'A']<<' ';}cout<<endl;
  24.     for (ch='A';ch<='Z';ch++) {cout<<ch<<' ';}
  25.     */
  26.     maxc=0;
  27.     for (i=0; i<=25; i++) if (a[i]>maxc) maxc=a[i];
  28.     for (m=maxc; m>=1; m--)
  29.     {
  30.         for (i=0; i<=25; i++)
  31.         {
  32.             if (a[i]>=m) cout<<'*';
  33.             else cout<<' ';
  34.             ///cout<<' ';
  35.         }
  36.         cout<<endl;
  37.     }
  38.     for (ch='A'; ch<='Z'; ch++) cout<<ch;

  39.     return 0;
  40. }
复制代码
回复 支持 反对

使用道具 举报

2

主题

19

帖子

114

积分

注册会员

Rank: 2

积分
114
10#
发表于 2019-3-24 10:44:22 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. string s,s1,s2,s3,s4;
  4. int i,l,maxc,n;
  5. char ch;
  6. int a[26];
  7. int main()
  8. {
  9.     getline(cin,s1);
  10.     getline(cin,s2);
  11.     getline(cin,s3);
  12.     getline(cin,s4);
  13.     s=s1+s2+s3+s4;
  14.     l=s.size();
  15.     for(i=0;i<=25;i++) a[i]=0;
  16.     for(i=0;i<=l-1;i++)
  17.     {
  18.         ch=s[i];
  19.    if(ch>='A'&&ch<='Z') a[ch-'A']++;
  20.     }

  21.    maxc=0;
  22.    for(i=0;i<=25;i++) if(a[i]>maxc) maxc=a[i];
  23.    for(n=maxc;n>=1;n--)
  24.    {
  25.        for(i=0;i<=25;i++)
  26.        {
  27.            if(a[i]>=n) cout<<'*';
  28.            else cout<<' ';
  29.            cout<<' ';
  30.        }
  31.        cout<<endl;

  32.    }
  33.    for(ch='A';ch<='Z';ch++) cout<<ch<<' ';
  34. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 15:34 , Processed in 0.131814 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表