直方图

前言

牛客网PAT乙级训练1031

题目描述

又到年底统计报表的时间了。我们公司一共生产“0”到“9”十种产品,现在给你一份销售记录,请你帮忙绘制一份直方图。

输入描述

输入包含多组数据,每组数据包含一个字符串s。
s仅包含数字,长度不超过100。

输出描述

对应每一组数据,依次为十种产品绘制高度等于其销量的'*'柱图。
直方图的高度等于数据中数量最多产品的个数,如果某种产品高度不到直方图的高度,用空格补全。
直方图下方依次输出0到9作为坐标。

输入例子

0123456789123
123012312

输出例子

输出例子

解析

解决本题需要弄清楚如下两个问题:

  1. 如何计算出所给字符串中0-9分别出现的次数
  2. 如何根据出现的次数画出直方图

针对第一个问题,只需要如下两行代码:

for (int i = 0; i < s.length(); i++)
    count[s.charAt(i) - '0']++;     //count[i]表示i出现的次数,此时i的范围是0-9

对于第二个问题,直方图最高的点说明这个数出现的次数最多,所以先找到最大的次数max,也就是说,max多少,最后画出的直方图就有多少行。

找到max的代码段:

//先找到最大的一个数
int max = 0;
for (int i = 0; i < 10; i++) {
    if (max < count[i]) {
        max = count[i];
    }
}

然后,最头疼的问题就是如何画出来了。如下代码:

//此时的i表示的是行数,行数从上往下依次递减
for (int i = max; i >= 1; i--) {
    for (int j = 0; j < 10; j++) {
        //如果j出现的次数大于等于行数,就打印
        if (count[j] >= i) {
            System.out.print("*");
        } else {
            System.out.print(" ");
        }
    }
    System.out.println("");
}
System.out.println("0123456789");

最后附上全部代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String s = scanner.next();
            int count[] = new int[10];
            for (int i = 0; i < s.length(); i++) {
                count[s.charAt(i) - '0']++;     //count[i]表示i出现的次数
            }
            //开始画图
            //先找到最大的一个数
            int max = 0;
            for (int i = 0; i < 10; i++) {
                if (max < count[i]) {
                    max = count[i];
                }
            }
            //此时的i表示的是行数,行数从上往下依次递减
            for (int i = max; i >= 1; i--) {
                for (int j = 0; j < 10; j++) {
                    //如果j出现的次数大于等于行数,就打印
                    if (count[j] >= i) {
                        System.out.print("*");
                    } else {
                        System.out.print(" ");
                    }
                }
                System.out.println("");
            }
            System.out.println("0123456789");
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 直方图主要用在数据图表,作为对比数据,用柱体高度的高低,形象直观地表达出来,往往与折线图配合使用,而折线图便于从众...
    理想是试阅读 1,110评论 0 0
  • 前言 什么是直方图? 直方图是对数据的集合做统计,并将统计结果分布于一系列预定义的bins中。 例如: 如果我按照...
    我的名字好长好长灬阅读 10,271评论 0 3
  • 频数分布直方图(简称直方图)是品管七大手法之一,是一种反映产品质量分布和波动情况的分析方法,在质量管理中,我们常用...
    质量大数据阅读 1,452评论 0 0
  • 本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本...
    kyson老师阅读 2,592评论 0 49
  • 这本书是一本很好看的童话故事,里面讲述了一只蟋蟀从农村到了纽约时代广场的事,接下来就要开始讲故事了。 这本书里面有...
    Max_k阅读 1,258评论 5 4

友情链接更多精彩内容