[洛谷每日一题]P1598 垂直柱状图

本题的字符计数用桶排序没什么好说的;

这里我只想记录一下怎么把数组转换成柱状图,即下面这种形式

 用两个嵌套的for循环,第一层是循环行,第二层是循环列;

找出数组中最大的数据就是行数

        //输出结果
		for(int i = 0; i < Max(arr); i ++) {//第i+1行
			for(int j = 0; j <= 25; j++) {
				if(arr[j] >= Max(arr)-i)System.out.print('*');
				else System.out.print(' ');
				if(j != 25)System.out.print(' ');
			}
			System.out.println("");
		}
        //输出字母
		for(int i = 65; i <= 90; i ++) {
			System.out.print((char)i);
			if(i != 90)System.out.print(' ');
		}

 大写字母范围在65('A')~90('Z')之间,用数字循环转char型就不用手动输出26个字母了。

提交时,这里有坑,两个字母之间有一个空格;

附上我的AC代码:

package p1598;
import java.util.*;
public class Main {
	public static int Max(int arr[]) {
		int max=0;
		for(int i = 0; i < 26; i ++) {
			if(max < arr[i])max = arr[i];
		}
		return max;
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String s1 = in.nextLine();
		String s2 = in.nextLine();
		String s3 = in.nextLine();
		String s4 = in.nextLine();
		//测试正确录入了数据
		int []arr = new int[26];//arr用于存储各个数字出现的次数
		//开始计数
		for(int i = 0; i < s1.length(); i++) {
			if(s1.charAt(i) <= 90 && s1.charAt(i) >= 65) arr[(int)s1.charAt(i)-65] ++;
		}
		for(int i = 0; i < s2.length(); i++) {
			if(s2.charAt(i) <= 90 && s2.charAt(i) >= 65) arr[(int)s2.charAt(i)-65] ++;
		}
		for(int i = 0; i < s3.length(); i++) {
			if(s3.charAt(i) <= 90 && s3.charAt(i) >= 65) arr[(int)s3.charAt(i)-65] ++;
		}
		for(int i = 0; i < s4.length(); i++) {
			if(s4.charAt(i) <= 90 && s4.charAt(i) >= 65) arr[(int)s4.charAt(i)-65] ++;
		}
		//输出结果
		//for(int i = 0; i <= 25; i ++)System.out.println(arr[i]);
		for(int i = 0; i < Max(arr); i ++) {//第i+1行
			for(int j = 0; j <= 25; j++) {
				if(arr[j] >= Max(arr)-i)System.out.print('*');
				else System.out.print(' ');
				if(j != 25)System.out.print(' ');
			}
			System.out.println("");
		}
		for(int i = 65; i <= 90; i ++) {
			System.out.print((char)i);
			if(i != 90)System.out.print(' ');
		}
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值