制作数组直方图的程序
给定一个整数数组,打印数组值的直方图。
例子:
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