用C ++创建直方图(家庭作业)

时间:2012-02-05 02:13:58

标签: c++ formatting histogram

在我的c ++课程中,我们得到了分配对。通常我可以很容易地提出一个有效的算法,这次我无法弄清楚如何做到这一点来挽救我的生命。

我正在寻找的是有人解释一个算法(或者只是给我一些有用的提示),以便完成这项工作。我还处于计划阶段,希望自己完成这些代码以便学习。我需要一点帮助才能到达那里。

我们必须根据4或5整数输入创建直方图。它应该看起来像这样:

Calling histo(5, 4, 6, 2) should produce output that appears like:

        *
    *   *
    * * *
    * * *
    * * * *
    * * * *
    -------
    A B C D

格式化就是杀了我。更糟糕的是,我们不能使用任何类型的数组或使用其他库的“高级”排序系统。

起初我以为我可以安排从最高到最低顺序的值。但后来我意识到我不知道如何在不使用sort函数的情况下做到这一点,我不知道如何从那里开始。

对任何可以帮助我开始这项任务的人都感到荣幸。 :)

3 个答案:

答案 0 :(得分:1)

尝试以下内容:

  1. 确定直方图中的最大数字
  2. 使用这样的循环构建直方图:

    for(int i = largest; i >= 1; i--)

    在循环体内,执行步骤3到5(含)

  3. 如果i <= value_of_column_a则打印*,否则打印空格

  4. 对每一列重复步骤3(或写一个循环......)

  5. 打印换行符

  6. 使用-

  7. 打印水平线
  8. 打印列标签

答案 1 :(得分:0)

也许我错了你的q,但是如果你知道每一列中有多少项,那么打印就像你的例子一样容易:

步骤1:找到最大数字,存储在变量中,分配给列。

第2步:打印空格,直到找到最大值的列。打印明星。打印剩余的星星/空间。添加一个\ n字符。

第3步:查找下一个最大值在最大值> =最大值的列中打印星号,否则打印空格。添加换行符。最后。

步骤4:重复步骤3(直到下面的停止条件)

当您打印出等于最大最大值的星数时,您已经打印了所有这些。

步骤5:添加--------行和\ n

第6步:添加行标题和\ n

答案 2 :(得分:0)

如果我正确理解了问题,我认为问题可以解决这个问题:

a= <array of the numbers entered>
T=<number of numbers entered> = length(a) //This variable is used to 
                                          //determine if we have finished
                                          //and it will change its value

Alph={A,B,C,D,E,F,G,..., Z}  //A constant array containing the alphabet
                             //We will use it to print the bottom row

for (i=1 to T) {print Alph[i]+" "}; //Prints the letters (plus space), 
                                    //one for each number entered

for (i=1 to T) {print "--"};        //Prints the two dashes per letter above 
                                    //the letters, one for each

while (T!=0) do {
   for (i=1 to N) do {
       if (a[i]>0) {print "*"; a[i]--;} else {print " "; T--;};
   };
   if (T!=0) {T=N};

}

这样做,对于每个非零输入的数字,它将打印*然后减少输入的数字。当其中一个数字变为零时,它会停止为其列添加* s。当所有数字都变为零时(注意当T的值从 中出现为零时将发生这种情况。这就是变量T的用途)然后它就会停止。

我认为问题不在于直方图。请注意,它也不需要排序甚至不需要