【问题标题】:Horizontal and vertical histogram of an array in CC中数组的水平和垂直直方图
【发布时间】:2013-06-19 21:52:24
【问题描述】:

我需要获取给定数组的水平和垂直直方图。以下是我尝试过的 C 代码。有什么方法可以改进这个或任何简单的替代方法吗?

#include <stdio.h>
#define size 10
int main() {
  int array[size] = {2, 5, 7, 8, 10, 16, 7, 4, 3, 4};
  int i, j, bigCount, temp;

 /* To get Horizontal Histogram */
  for (i = 0; i < size; ++i) {
    printf("\n%3d|", i);
    for (j = 0; j < array[i]; ++j)
      printf(" #");
  }

  /* To find the biggest count */
  bigCount = array[0];
  for (i = 0; i < size; ++i)
    if(array[i] > bigCount)
      bigCount = array[i];
  temp = bigCount;
  printf("\n\n");

  /* To get Vertical Histogram */
  for (i = 0; i < bigCount; ++i) {
    printf("\n%3d|", bigCount - i);
     for (j = 0; j < size; ++j)
       if (array[j] < temp)
     printf("   ");
       else {
     printf("  #");
     --array[j];
       }
     --temp;
  }

 /* printing the x-axis */
  printf("\n    ");
  for (i = 0; i < size; ++i) 
    printf("  -", i);
  printf("\n    ");
  for (i = 0; i < size; ++i) 
    printf("%3d", i);
  printf("\n");
  return 0;

}

【问题讨论】:

  • “简单”意味着使用更少的变量、循环、函数等。完全减少代码行数..

标签: c arrays logic histogram


【解决方案1】:

做得很好。不过也有一些小地方可以改进:

您似乎错过了水平直方图上的 x 轴。

还有,就行了:

bigcount = array[1];

有一个错误。

我将采取的下一步是添加一些功能以允许用户输入任意数据。

【讨论】:

  • 我可以给bigCount = array[0]。但实际上也没有任何区别。
  • 是的,但这只是因为 array[0] 不是最大值。如果是,那么您的直方图将不正确。
  • 我不明白你的意思.. 但是在寻找 bigCount 的循环结束时,无论bigCount 的初始值如何,我们都会得到最大值,只要它是该数组中的值。
  • 你是对的。但是,如果数组中只有 1 个元素,那么您的程序将失败。通过使用数组 [0],您可以解决可能会导致段错误的边缘情况。
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 2013-05-18
  • 1970-01-01
  • 2014-04-19
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多