题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

思路

首先统计所有字符出现的次数,可以使用数组散列法或者直接使用map是实现,其次如何输出是本题的关键,方法是取得最高词频,作为输出控制台的高度,高度依次递减输出相应字符,如果词频小于高度输出空个否则输出*。(解题的过程中,发现set不可排序,无法使用sort())

AC1 数组散列+vector记录输出字符串

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
string instr;
int nums[26] = {0};
for (int i = 0; i < 4; ++i) {
getline(cin, instr);
for (int j = 0; j < instr.size(); ++j) {
//字符转数字
int temp = instr[j] - 'A';
//统计次数
if (temp < 26 && temp > -1)nums[temp]++;
}
}
//求取最大值
int max = 0 ;
for (int k = 0; k < 26; ++k) {
if (nums[k]>max)max = nums[k];
}
vector<string> outstr;
//生成输出的数组
for (;max>0;max--) {
for (int i = 0; i < 26; ++i) {
if (nums[i] >= max){
outstr.push_back("*");
if (i!=25)outstr.push_back(" ");
}
else{
outstr.push_back(" ");
if (i!=25)outstr.push_back(" ");
}
}
outstr.push_back("\n");
}
//输出
for (vector<string>::iterator iter =outstr.begin();iter!=outstr.end();++iter) {
cout<<*iter;
}
char charpter ='A';
for (int l = 0; l < 26; ++l) {
cout<<charpter++;
if(l!=25)cout<<" ";
}
return 0;
}

AC2

#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
using namespace std; int main() {
string instr;
map<char, int> ma;
for (int i = 0; i < 4; ++i) {
getline(cin, instr);
for (int j = 0; j < instr.size(); ++j) {
int temp = instr[j] - 'A';
//如果使用[]目前不属于map一部分的索引操作符访问某个键,则会自动为您添加一个键
if (temp > -1 && temp < 26)ma[instr[j]]++;
}
}
//取最高层
int max = 0;
for( map<char, int>::iterator x = ma.begin();x!=ma.end();x++)
if((*x).second>max)
max = (*x).second;
vector<string> outstr;
//生成输出的数组
for (;max>0;max--) {
for (int i = 0; i < 26; ++i) {
if (ma[i+'A'] >= max){ outstr.push_back("*");
if (i!=25)outstr.push_back(" ");
}
else{
outstr.push_back(" ");
if (i!=25)outstr.push_back(" ");
}
}
outstr.push_back("\n");
}
//输出
for (vector<string>::iterator iter =outstr.begin();iter!=outstr.end();++iter) {
cout<<*iter;
}
for ( map<char, int>::iterator iter=ma.begin();iter!=ma.end();iter++)
cout << (*iter).first << " ";
return 0;
}

学到的点

1 geline()可以用于输入多行字符串,\n是他的默认结束符,一段结束其指针会跳转至结束符后所以可以输入多行字符串

字符串、散列--P1598 垂直柱状图的更多相关文章

  1. 洛谷 P1598 垂直柱状图【字符串+模拟】

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

  2. 洛谷—— P1598 垂直柱状图

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

  3. 洛谷 P1598 垂直柱状图

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

  4. 洛谷 P1598 垂直柱状图【字符串】

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

  5. (水题)洛谷 - P1598 - 垂直柱状图

    https://www.luogu.org/problemnew/show/P1598 忘记读取后清空数组,也不知道准确的长度. #include<bits/stdc++.h> using ...

  6. 洛谷——P1598 垂直柱状图

    https://www.luogu.org/problem/show?pid=1598 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字 ...

  7. Java实现 洛谷 P1598 垂直柱状图

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

  8. 洛谷P1598 垂直柱状图

    模拟题...我自己一直被光标下去上不去怎么模拟困扰,实际上可以直接从高到低,从左到右模拟 我的代码(算法借鉴题解) #include <bits/stdc++.h> using names ...

  9. P1598 垂直柱状图

    输入格式: 四行字符,由大写字母组成,每行不超过100个字符 输出格式: 由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的.在任何一行末尾不要打印不需要的多余空格.不要打印任何空行 ...

随机推荐

  1. servlet container:tomcat jetty and undertow

    1 spring boot内嵌容器支持tomcat.jetty和undertow 但是undertow性能最好,详见: https://examples.javacodegeeks.com/enter ...

  2. commons-fileupload 组件实现文件上传

    index.jsp 核心代码: //创建文件项工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建解析请求 数据的Servl ...

  3. HDU 5752Sqrt Bo

    Sqrt Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  4. FastText 分析与实践

    一. 前言 自然语言处理(NLP)是机器学习,人工智能中的一个重要领域.文本表达是 NLP中的基础技术,文本分类则是 NLP 的重要应用.在 2016 年, Facebook Research 开源了 ...

  5. Flask的flask-sqlalchemy

    flask-sqlalchemy是Flask和SQLAlchemy的管理者 - db = SQLAlchemy() - 包含配置 - 包含ORM基类 - 包含create_all - engine - ...

  6. 第十二周 Leetcode 354. Russian Doll Envelopes(HARD) LIS问题

    Leetcode354 暴力的方法是显而易见的 O(n^2)构造一个DAG找最长链即可. 也有办法优化到O(nlogn) 注意 信封的方向是不能转换的. 对第一维从小到大排序,第一维相同第二维从大到小 ...

  7. bzoj2705 [SDOI2012]Longge的问题——因数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2705 一开始自己想了半天... 有了点思路:遍历 n 的因数 k,每个因数要预处理出 gcd ...

  8. Java IO 字节流与字符流 (二)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  9. ECS服务器配置密钥登录及常用日志

    一.介绍 1.SSH(22端口)是Secure Shell Protocol的简写,由IETF网络工作小组(Network Working Group)制定:在进行数据传输之前,SSH先对联机数据包通 ...

  10. html表格合并单元格

    th标签 合并列 colspan="k" 合并行 rowspan="k"   例子<th colspan="2", rowspan=& ...