题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

思路

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

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

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <vector>
  5. using namespace std;
  6. int main() {
  7. string instr;
  8. int nums[26] = {0};
  9. for (int i = 0; i < 4; ++i) {
  10. getline(cin, instr);
  11. for (int j = 0; j < instr.size(); ++j) {
  12. //字符转数字
  13. int temp = instr[j] - 'A';
  14. //统计次数
  15. if (temp < 26 && temp > -1)nums[temp]++;
  16. }
  17. }
  18. //求取最大值
  19. int max = 0 ;
  20. for (int k = 0; k < 26; ++k) {
  21. if (nums[k]>max)max = nums[k];
  22. }
  23. vector<string> outstr;
  24. //生成输出的数组
  25. for (;max>0;max--) {
  26. for (int i = 0; i < 26; ++i) {
  27. if (nums[i] >= max){
  28. outstr.push_back("*");
  29. if (i!=25)outstr.push_back(" ");
  30. }
  31. else{
  32. outstr.push_back(" ");
  33. if (i!=25)outstr.push_back(" ");
  34. }
  35. }
  36. outstr.push_back("\n");
  37. }
  38. //输出
  39. for (vector<string>::iterator iter =outstr.begin();iter!=outstr.end();++iter) {
  40. cout<<*iter;
  41. }
  42. char charpter ='A';
  43. for (int l = 0; l < 26; ++l) {
  44. cout<<charpter++;
  45. if(l!=25)cout<<" ";
  46. }
  47. return 0;
  48. }

AC2

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <map>
  5. #include <vector>
  6. using namespace std;
  7. int main() {
  8. string instr;
  9. map<char, int> ma;
  10. for (int i = 0; i < 4; ++i) {
  11. getline(cin, instr);
  12. for (int j = 0; j < instr.size(); ++j) {
  13. int temp = instr[j] - 'A';
  14. //如果使用[]目前不属于map一部分的索引操作符访问某个键,则会自动为您添加一个键
  15. if (temp > -1 && temp < 26)ma[instr[j]]++;
  16. }
  17. }
  18. //取最高层
  19. int max = 0;
  20. for( map<char, int>::iterator x = ma.begin();x!=ma.end();x++)
  21. if((*x).second>max)
  22. max = (*x).second;
  23. vector<string> outstr;
  24. //生成输出的数组
  25. for (;max>0;max--) {
  26. for (int i = 0; i < 26; ++i) {
  27. if (ma[i+'A'] >= max){
  28. outstr.push_back("*");
  29. if (i!=25)outstr.push_back(" ");
  30. }
  31. else{
  32. outstr.push_back(" ");
  33. if (i!=25)outstr.push_back(" ");
  34. }
  35. }
  36. outstr.push_back("\n");
  37. }
  38. //输出
  39. for (vector<string>::iterator iter =outstr.begin();iter!=outstr.end();++iter) {
  40. cout<<*iter;
  41. }
  42. for ( map<char, int>::iterator iter=ma.begin();iter!=ma.end();iter++)
  43. cout << (*iter).first << " ";
  44. return 0;
  45. }

学到的点

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. flash、flex builder、flash builder、 air的关系

    flash VS flex builder flash被adobe收购的时候是flash8,已经可以AS2面向对象了. 而被adobe收购后,adobe准备把flash打造成一个开发工具.就比如JBU ...

  2. HTTP请求错误码大全(转)

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...

  3. luogu3605晋升者计数

    https://www.zybuluo.com/ysner/note/1282069 题面 给一颗带点权的树,求每个点的子树中比该点权值大的点的个数. \(n\leq10^5\) 解析 首先有个很无脑 ...

  4. Integer值判断是否相等问题

    昨天在开发中遇到一个问题,定义了两个Integer变量,暂且定义为Integer a;  Integer b; 这两个值由前端赋值并传到后台,前台传的是a = 12345, b = 12345,  但 ...

  5. 【废弃】【WIP】JavaScript Object

    创建: 2017/11/03 废弃: 2019/02/19 重构此篇.原文归入废弃  增加[废弃中]标签与总体任务 结束: 2019/03/03 完成废弃, 删除[废弃中]标签, 添加[废弃]标签 T ...

  6. bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】

    洛谷的数据毒啊 把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可 #include<iostream> #include<cstdio> ...

  7. Linux学习笔记之Linux shell脚本运行出现问题:bash: ./test: bin/sh: bad interpreter: No such file or directory

    问题: 在Linux系统中使用“vi test.sh”命令创建.sh文件,保存文件(:wq)并赋予权限(chmod +x test.sh)后,执行(./test.sh),出现问题:“bash: ./t ...

  8. KMP POJ 2752 Seek the Name, Seek the Fame

    题目传送门 /* 题意:求出一个串的前缀与后缀相同的字串的长度 KMP:nex[]就有这样的性质,倒过来输出就行了 */ /************************************** ...

  9. H - Where is the Marble?(set+vector)

    Description Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers wr ...

  10. Android 性能优化(19)*代码优化11条技巧:Performance Tips

    Performance Tips 1.In this document Avoid Creating Unnecessary Objects 避免多余的对象 Prefer Static Over Vi ...