本题的字符计数用桶排序没什么好说的;
这里我只想记录一下怎么把数组转换成柱状图,即下面这种形式
用两个嵌套的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(' ');
}
}
}