如何仅使用c ++中的for循环打印此代码的垂直直方图?

时间:2018-08-05 08:07:58

标签: c++

//Program to Print Horizontal Histogram of Shape{*} 

#include<"iostream">

using namespace std;

int main() {
    int a[100],n,i,j;

    cout<<"Enter Size of Array"<<endl;
    cin>>n;

    cout<<"Enter Array Elemnts"<<endl;

    for(i=0;i<n;i++) {
        cin>>a[i];
    }

    for(i=0;i<n;i++) {
        for(j=0;j<a[i];j++) {
            cout<<"* ";
        }
        cout<<endl;
    }
}

此代码是在水平方向上打印直方图,但是我想在垂直方向上从下到上打印它。

2 个答案:

答案 0 :(得分:1)

解决方案取决于列是否指向下方或上方。除此之外,解决方案是相似的:

外部循环遍历行。内部循环遍历列以及相应的数组元素。如果该值小于当前行,则打印一个实字符,否则打印一个空格。

对于必要的行数,必须知道数组中的最大值。对于向上指向的列,必须事先确定,因为它是外循环中迭代的起始值。

我的示例代码:

#include <iostream>
#include <vector>
#include <cmath>

int main()
{
  int n = 10; // size of array
  std::vector<int> a; // array elements
  int maxA = 15;
  for (int i = 0; i < n; ++i) a.push_back(rand() % maxA);
  // print values
  for (int value : a) std::cout << ' ' << value;
  std::cout << '\n';
  // determine max height of columns
  maxA = 0;
  for (int value : a) if (maxA < value) maxA = value;
  // output maxA lines
  for (; maxA > 0; --maxA) {
    for (int value : a) std::cout << (value >= maxA ? " #" : "  ");
    std::cout << '\n';
  }
  // done
  return 0;
}

输出:

 13 1 12 10 8 10 1 12 9 1
 #                  
 #   #         #    
 #   #         #    
 #   # #   #   #    
 #   # #   #   # #  
 #   # # # #   # #  
 #   # # # #   # #  
 #   # # # #   # #  
 #   # # # #   # #  
 #   # # # #   # #  
 #   # # # #   # #  
 #   # # # #   # #  
 # # # # # # # # # #

Live Demo on coliru

答案 1 :(得分:0)

include <“ iostream”>

使用命名空间标准;

int main()

{

DEFAULT

}