从数组中的数据绘制直方图

时间:2017-10-28 23:01:37

标签: c++ arrays histogram

我正在尝试编写一个以int数组作为参数的函数,并为数组中的数据写一个带'*'的直方图。

例如,对于int arr [] {2,1,0,7,1,9},我们应该得到:

histogram

我该如何编写此代码?

我的代码:

    using namespace std;

    int max = 0;
    char znak = '*';

    void histo(int arr[], size_t size) {
        for (int i = 0; i < size; i++) {
            if (arr[i] > max)
                max = arr[i];
        }

//drawing histogram

while (max > 0) {
            for (int i = 0; i < size; i++) {
                if (arr[i] >= max) {
                    cout << znak << " ";
                }
                else {
                    cout << " ";
                }
            }
            max--;
        }

    }


    int main()
    {
        int arr[]{2,1,0,7,1,9};
        size_t size = sizeof(arr) / sizeof(*arr);
        histo(arr, size);

    }

1 个答案:

答案 0 :(得分:0)

以下是代码的工作方式

char znak = '*';

void histo(int arr[], size_t size) {

    //finding the top point of this hystogram
    int max = arr[0];
    for (int i = 0; i < size; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    int level = max;
    int currSize =0;
    while (level != 0) {
        for (int i = 0; i < size; i++) {
            currSize = arr[i];
            if (currSize >= level) {
                cout << znak;
            }
            else
            {
                cout << " ";
            }
        }
        level--;

        cout << "\n";
    }
}
int main()
{
    int arr[]{2,1,0,7,1,9};
    size_t size = sizeof(arr) / sizeof(*arr);
    histo(arr, size);

}

由于所有内容必须同时打印,因此您需要确保仅在阵列显示应该在该高度打印时打印*。