字符串、散列--P1598 垂直柱状图
题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过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 垂直柱状图的更多相关文章
- 洛谷 P1598 垂直柱状图【字符串+模拟】
P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. ...
- 洛谷—— P1598 垂直柱状图
P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. ...
- 洛谷 P1598 垂直柱状图
P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. ...
- 洛谷 P1598 垂直柱状图【字符串】
题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. 输入输出格式 输入格式 ...
- (水题)洛谷 - P1598 - 垂直柱状图
https://www.luogu.org/problemnew/show/P1598 忘记读取后清空数组,也不知道准确的长度. #include<bits/stdc++.h> using ...
- 洛谷——P1598 垂直柱状图
https://www.luogu.org/problem/show?pid=1598 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字 ...
- Java实现 洛谷 P1598 垂直柱状图
题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. 输入格式 四行字符, ...
- 洛谷P1598 垂直柱状图
模拟题...我自己一直被光标下去上不去怎么模拟困扰,实际上可以直接从高到低,从左到右模拟 我的代码(算法借鉴题解) #include <bits/stdc++.h> using names ...
- P1598 垂直柱状图
输入格式: 四行字符,由大写字母组成,每行不超过100个字符 输出格式: 由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的.在任何一行末尾不要打印不需要的多余空格.不要打印任何空行 ...
随机推荐
- 【bzoj2743】[HEOI2012]采花
树状数组 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring& ...
- height not divisible by 2
height not divisible by 2 h.264 - FFMPEG (libx264) "height not divisible by 2" - Stack Ove ...
- Xubuntu 计划从 19.04 版本开始停止提供 32 位安装镜像(XDE/LXQt的 Lubuntu 成为了目前唯一仍然提供 32 位安装镜像的 Ubuntu 桌面发行版)
Ubuntu 17.10 以及其他许多 *buntu 衍生品都已在今年早些时候停止提供 32 位安装镜像.但其中有一个依然坚持提供适用于 i386 架构的镜像,它就是 Xubuntu,但现在 Xubu ...
- BZOJ_2565_最长双回文串_manacher
BZOJ_2565_最长双回文串_manacher Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不 ...
- python-----opencv读取视频、读取图片 显示指定大小并按键实现暂停、播放
按空格键实现暂停播放,代码如下: cv2.namedWindow("m1", 0) cv2.resizeWindow("m1", 800, 600) cv2.i ...
- 继续不温不火Windows Phone
已经辞了,人也离开帝都了.是否还会回去? 不知道,也许脑子突然正常了又跑回去了. 如题,继续不温不火的Windows Phone. 今年2014,没错,Windows Phone是新加了好几家厂商,微 ...
- 【167】IDL 中相关技巧
IDL 中相关技巧 1. 注释:分号“;”表示注释内容的开始. 2. 续行:最后一个字符是“$”,那么本行将紧接着下一行,续行标志.(换行符,$+回车) 3. 中文编码:窗口>首选项>常规 ...
- selenium对51job进行职位爬虫
selenium 爬虫流程如下: 1.对某职位进行爬虫 ---如:自动化测试 2.用到IDE为 pycharm 3.爬虫职位导入到MongoDB数据库中 4.在线安装 pip install pymo ...
- DotnetCore(1)尝鲜构建Web应用
在上篇文章中DotnetCore环境安装完成后,现在我们来尝试构建Web应用. 新建文件夹NetCoreWebDemo,并cd进入NetCoreWebDemo文件夹 同时Ctrl+shift按下快捷键 ...
- 371 Sum of Two Integers 两整数之和
不使用运算符 + 和-,计算两整数a .b之和.示例:若 a = 1 ,b = 2,返回 3. 详见:https://leetcode.com/problems/sum-of-two-integers ...