Гистограмма для массива с числами

161
23 апреля 2018, 00:04

Дан массив: mas={1, 2, 3, 4, 5, 10, 20, 24, 55, 62, 73, 74, 89, 93, 94, 95};
Нужно вывести гистограмму, где каждая колонка отображает количество чисел в каждом диапазоне (от 0-9, 10-19, 20-29 ... 90-99):

# # #  # # # # #
#   #      #   #
#              #
# 
#

Создал массив, не могу правильно составить цикл. Прошу о помощи или о совете как граммотно подойти к этому вопросу.

Answer 1
int[] gist = new int[10]; // Инициализация идет нулями
   for (int i = 0; i < mas.length; i++) {
      if (mas[i] < 10) {
         gist[0]++;
         continue;
      }
      if (mas[i] < 20) {
         gist[1]++;
         continue;
      }
............ и т.д. перебор значений
      if (mas[i] < 100) {
         gist[9]++;
         continue;
      }
   }
// На выходе будет массив с количеством каждого типа элементов

И есть короче вариант

 int[] gist = new int[10]; // Инициализация идет нулями
       for (int i = 0; i < mas.length; i++) {
           int vol = mas[i]/10;
           gist[vol]++;  
       }
Answer 2
import java.util.*;
import java.io.*;
public class Main{
PrintWriter pw;
Scanner sc;
    public static void main(String[] args) throws IOException{
    new Main().run();
    }
    public void run() throws IOException{
    sc = new Scanner(new File("input.txt");
    //new Scanner(System.in);
    int i=sc.nextInt();
    byte [] mas = new byte[i];
    i=0;
    //получаем массив mas
    while(i<mas.length){
        mas[i]=sc.nextByte();i++;
    }
    //получаем количество чисел в диапазоне (0-9, ..., 90-99)
    int[] gist=new int[10];
    for(int i=0;i<gist.length;i++){
        gist[i]=getD(mas,i*10,i*10+9);
    }
    //получаем максимальную высоту колонок
    int max=getMax(gist);
    //создаём массив String для вывода
    //гистаграммы построчно
    String[] sg=new String[max];
    //Для каждой строки определяем существование
    //столбца (>0) и если существует
    //то прибавляем к строке "#" решётка, а потом
    //вычитаем столбец
    //иначе если столбец нулевой, то к строке прибавляем " " пробел
    for(int i=0;i<sg.length;i++){
        for(int j=0;j<gis.length;j++){
        if(gist[j]>0){
        sg[i]+="#";gist[j]--;
        } else if(gist[j]==0)sg[i]+=" ";
        }
    }
    //выводим гистограмму в файл
    pw = new PrintWriter(new File("output.txt"));
    //new PrintWriter(System.out);
    for(int i=0;i<sg.length;i++){
        pw.println(sg[i]);
    }
    pw.close();
    }
    //[min,max]
    public int getD(byte[] mas,
                    byte min,
                    byte max){
    int d=0;
    for(int i=0;i<mas.length;i++){
        if((min<=mas[i])&&(mas[i]<=max))d++;
    }
    return d;
    }
    public int getMax(int[] gist){
    int max=0;
    for(int i=0;i<gist.length;i++){
        if(gist[i]>max)max=gist[i];
    }
    return max;
    }
}
READ ALSO
Масштабирование Spring MVC

Масштабирование Spring MVC

Добрый деньМожет немного глупый вопрос, но все же задам

173
MySQL индексы, помогите разобраться

MySQL индексы, помогите разобраться

Есть простая таблица:

186
Выборка с бд Mysql с динамическим именем таблицы

Выборка с бд Mysql с динамическим именем таблицы

Подскажите пожалуйстаНужно сделать выборку с бд при это название таблицы, откуда делается выборка, образуется исходя из префикса таблицы...

183
Выборка по двум условиям mysql

Выборка по двум условиям mysql

Есть две таблицы, они связаны между собой один ко многимТаблица client содержит первичный ключ ID, а таблица orders содержит внешний ключ ID_of_client

192