Programa para hacer un histograma de una array

Dada una array de enteros, imprime el histograma de los valores de la array.

Ejemplos:

Input : 0 11 2 13 5 12 8 11 12 9
Output :                  
13 |           x                   
12 |           x     x        x    
11 |     x     x     x     x  x    
10 |     x     x     x     x  x    
 9 |     x     x     x     x  x  x 
 8 |     x     x     x  x  x  x  x 
 7 |     x     x     x  x  x  x  x 
 6 |     x     x     x  x  x  x  x 
 5 |     x     x  x  x  x  x  x  x 
 4 |     x     x  x  x  x  x  x  x 
 3 |     x     x  x  x  x  x  x  x 
 2 |     x  x  x  x  x  x  x  x  x 
 1 |     x  x  x  x  x  x  x  x  x 
 0 |  x  x  x  x  x  x  x  x  x  x 
---------------------------------------
      0 11  2 13  5 12  8 11 12  9 


Input : 10 9 12 4 5 2 8 5 3 1
Output :                 
12 |        x                      
11 |        x                      
10 |  x     x                      
 9 |  x  x  x                      
 8 |  x  x  x           x          
 7 |  x  x  x           x          
 6 |  x  x  x           x          
 5 |  x  x  x     x     x  x       
 4 |  x  x  x  x  x     x  x       
 3 |  x  x  x  x  x     x  x  x    
 2 |  x  x  x  x  x  x  x  x  x    
 1 |  x  x  x  x  x  x  x  x  x  x 
 0 |  x  x  x  x  x  x  x  x  x  x 
---------------------------------------
     10  9 12  4  5  2  8  5  3  1

La idea es imprimir el histograma dado fila por fila. Para cada elemento, verificamos si es mayor o igual que la fila actual. En caso afirmativo, coloque una ‘x’ para ese elemento. De lo contrario ponemos un espacio.

// CPP program to make histogram of an array
#include <bits/stdc++.h>
using namespace std;
  
void printHistogram(int arr[], int n)
{
    int maxEle = *max_element(arr, arr + n);
  
    for (int i = maxEle; i >= 0; i--) {
        cout.width(2);
        cout << right << i << " | ";
        for (int j = 0; j < n; j++) {
  
            // if array of element is greater
            // then array it print x
            if (arr[j] >= i)
                cout << " x ";
  
            // else print blank spaces
            else
                cout << "   ";
        }
        cout << "\n";
    }
  
    // print last line denoted by ----
    for (int i = 0; i < n + 3; i++)
        cout << "---";
  
    cout << "\n";
    cout << "     ";
  
    for (int i = 0; i < n; i++) {
        cout.width(2); // width for a number
        cout << right << arr[i] << " ";
    }
}
  
// Driver code
int main()
{
    int arr[10] = { 10, 9, 12, 4, 5, 2,
                    8, 5, 3, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    printHistogram(arr, n);
    return 0;
}

Producción:

                           
12 |        x                      
11 |        x                      
10 |  x     x                      
 9 |  x  x  x                      
 8 |  x  x  x           x          
 7 |  x  x  x           x          
 6 |  x  x  x           x          
 5 |  x  x  x     x     x  x       
 4 |  x  x  x  x  x     x  x       
 3 |  x  x  x  x  x     x  x  x    
 2 |  x  x  x  x  x  x  x  x  x    
 1 |  x  x  x  x  x  x  x  x  x  x 
 0 |  x  x  x  x  x  x  x  x  x  x 
---------------------------------------
     10  9 12  4  5  2  8  5  3  1

Este artículo es una contribución de Devanshu Agarwal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *