字符串、散列--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个字符 输出格式: 由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的.在任何一行末尾不要打印不需要的多余空格.不要打印任何空行 ...
随机推荐
- SICP习题练习
练习1.6 new-if的三个参数会先被执行,这样就会无限循环下去 练习1.7 (define (sqrt-iter last-guess guess x) (if (good-enough? las ...
- MPEG2、MPEG4、H264的差异
iso(国际标准化组织) MPEG系列 ITU-T(国际电联)h.系列 H.264:iso与ITU联合制定,数据压缩比超牛! MPEG-2简介 MPEG-2制定于1994年,设计目标是高级工业标准的图 ...
- ubuntu-10.10嵌入式开发环境搭建【转】
本文转载自:http://blog.csdn.net/zjhsucceed_329/article/details/8036781 版权声明:本文为博主原创文章,未经博主允许不得转载. ubuntu- ...
- android 添加手机短信,获取手机短信,删除手机短信和修改手机短信
注意添加权限: <uses-permission android:name="android.permission.READ_SMS"></uses-permis ...
- bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路【贪心】
按左端点排序,贪心的选即可 #include<iostream> #include<cstdio> #include<algorithm> using namesp ...
- 清北考前刷题day3下午好
/* 可以并查集维护 可以发现,某个联通快出现大于等于2个环,一定无法分配. 有解要么一个环,要么没有环. 一个环时答案等于点数乘2(顺时针或逆时针). 没有环是树,对于一个n个点的树,方案一定有n种 ...
- RabbitMQ三:Rabbit的安装
本章文章,摘自 园友 章为忠 的文章,查找了很多资料,他总结的最细,最全面,我就直接拿过来了 他的原文 http://www.cnblogs.com/zhangweizhong/p/5689209.h ...
- SQL优化器简介
文章导读: 什么是RBO? 什么是CBO? 我们在工作中经常会听到这样的声音:"SQL查询慢?你给数据库加个索引啊".虽然加索引并不一定能解决问题,但是这初步的体现了SQL优化的思 ...
- jQuery学习笔记(2)-选择器的使用
一.选择器是什么 有了jQuery的选择器,我们几乎可以获取页面上任意一个或一组对象 二.Dom对象和jQuery包装集 1.Dom对象 JavaScript中获取Dom对象的方式 <div i ...
- Spring.Net学习笔记(2)-依赖注入
一.开发环境 操作系统:Win10 编译器:VS2013 framework版本:.net 4.5 Spring版本:1.3.1 二.涉及程序集 Spring.Core.dll Common.Logg ...