首页 > 试题广场 >

直方图

[编程题]直方图
  • 热度指数:1774 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
又到年底统计报表的时间了。我们公司一共生产“0”到“9”十种产品,现在给你一份销售记录,请你帮忙绘制一份直方图。

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


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

输入

0123456789123
123012312

输出

 ***      
**********
0123456789
 **       
 ***      
****      
0123456789
import java.util.*;
public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            String s = sc.nextLine();
            Map<Integer,Integer> map = new HashMap<>();
            int max = -1;
            int max_index = -1;
            for(int i = 0 ; i < s.length() ; i++) { // 遍历字符串
                int n = s.charAt(i) - '0';
                if(map.containsKey(n)) {
                    map.put(n,map.get(n) + 1);
                    if(max <= map.get(n)) { // 更新最大值
                        max = map.get(n);
                        max_index = n;
                    }
                } else {
                    map.put(n, 1);
                }
            }
            // 输出
            for(int i = max ; i > 0 ; i--) {
                for(int j = 0 ; j < 10 ; j++) {
                    if(map.containsKey(j)) {
                        if(i <= map.get(j)) {
                            System.out.print("*");
                        } else {
                            System.out.print(" ");
                        }
                    } else {
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
            System.out.println("0123456789");
        }
    }
}

发表于 2021-11-30 17:32:06 回复(0)

问题信息

难度:
1条回答 12064浏览

热门推荐

通过挑战的用户

直方图