您的位置:首页 > 理论基础 > 数据结构算法

百练OJ:2800:垂直直方图

2017-07-23 12:03 211 查看

题目连接:

http://bailian.openjudge.cn/practice/2800/

描述:输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数。注意:只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数。
输入:输入包括4行由大写字母组成的文本,每行上字符的数目不超过80个。
输出:输出包括若干行。其中最后一行给出26个大写英文字母,这些字母之间用一个空格隔开。前面的几行包括空格和星号,每个字母出现几次,就在这个字母的上方输出一个星号。注意:输出的第一行不能是空行。



解题思路

本题思路:首先统计字符出现次数,然后创建矩阵,将该形式转换到矩阵当中。尤其要注意的是,在java中,对于没有赋值的char矩阵直接输出是不符合要求的。要输出真真正正的空格。

解题代码

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner input =new Scanner(System.in);
String str="";
String str1=input.nextLine();
String str2=input.nextLine();
String str3=input.nextLine();
String str4=input.nextLine();
str=str1+str2+str3+str4;
int n=str.length();
int[] lists=new int[26];

for(int i=0;i<n;i++){
if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){
lists[str.charAt(i)-'A']++;
}
}
int max=0;
for(int i=0;i<26;i++){
if(lists[i]>max){
max=lists[i];
}
}
char [][] c=new char [max+1][26];
for(int j=0;j<26;j++){
c[max][j]=(char) (j+'A');
}
for(int l=0;l<26;l++){
for(int k=max-1;k>=max-lists[l];k--){
c[k][l]='*';
}
}
for(int a=0;a<max;a++){
for(int b=0;b<26;b++){
if(c[a][b]=='*'){
System.out.print(c[a][b]+" ");
}
else{
System.out.print("  ");
}
}
System.out.println();
}
for(int j=0;j<26;j++){
System.out.print((char) (j+'A')+" ");
}
input.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息