📜  制作数组直方图的程序

📅  最后修改于: 2022-05-13 01:57:58.816000             🧑  作者: Mango

制作数组直方图的程序

给定一个整数数组,打印数组值的直方图。

例子:

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

这个想法是逐行打印给定的直方图。对于每个元素,我们检查它是否大于或等于当前行。如果是,请为该元素添加一个“x”。否则我们放一个空格。

// CPP program to make histogram of an array
#include 
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;
}

输出:

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