计数后打印垂直柱状图(洛谷P1598题题解,Java语言描述)

前言

这题挺好玩的,打印出来颇有老式MP4播放 ♪Music♪ 的感觉

题目要求

P1598题目链接

在这里插入图片描述

分析

这题看着挺爽,问题是怎么实现呢?

我们先是要读进来这四行数据(题干说了就是4行),然后变为char[],进行一下大写字母字符的过滤,计数结果装在长度为26的int[]里。

我们想知道有多少行,就必须知道最多的counter。
根据数据结构里学的内置size属性等操作,我们可以直接在添加的时候更新max变量,这样就不用在全部计数完成以后再次遍历数组啦。
当然本题int[]长度只有26,怎么做都可以啦。

打印的时候就要进行一下简单计算了,最后除去尾部的多余空格即可。
具体细节请看代码~~

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] char_counter = new int[26];
        int max = 0;
        //统计数据
        for (int i = 0; i < 4; i++) {
            for (char c : scanner.nextLine().toCharArray()) {
                if (c >= 'A' && c <= 'Z') {
                    char_counter[c-'A']++;
                    int temp_counter = char_counter[c-'A'];
                    if (temp_counter > max) {
                        //置新最大数值
                        max = temp_counter;
                    }
                }
            }
        }
        scanner.close();
        //处理打印
        for (int i = max-1; i >= 0; i--) {
            StringBuilder builder = new StringBuilder();
            for (int j : char_counter) {
                if (j - i > 0) {
                    builder.append("* ");
                } else {
                    builder.append("  ");
                }
            }
            //去除尾部空格
            System.out.println(builder.substring(0, builder.length()-1));
        }
        System.out.println("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z");
    }
}

在这里插入图片描述

怎么样?蛮酷的吧,快来试试吧!!

发布了351 篇原创文章 · 获赞 610 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104060497
今日推荐