再刷PAT系列~直方图

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

输入描述:
输入包含多组数据,每组数据包含一个字符串s。

s仅包含数字,长度不超过100。

输出描述:
对应每一组数据,依次为十种产品绘制高度等于其销量的“*”柱图。

直方图的高度等于数据中数量最多产品的个数,如果某种产品高度不到直方图的高度,用空格补全。

直方图下方依次输出0到9作为坐标。

输入例子:

0123456789123
123012312

输出例子:

***      
**********
0123456789
 **       
 ***      
****      
0123456789

分析:主要就是统计每个数字出现的频率问题
代码实现:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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()-1; i++) {
                count[s.charAt(i)-'0']++;// 统计s中不同数字出现的次数 s.charAt(i)-'0'得到s[i]中存储的数字字符对应count数组中哪一个下标,也是将字符转成数字,再记数加一。
            }
            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");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/xiaozhouchou/article/details/80910584