Центрирование вывода треугольника Паскаля в C ++

Я успешно написал код для вывода треугольника Паскаля в несколько треугольной форме, используя cout.width (total_rows - current_row), но он выглядит так:

               1 
              1 1 
             1 2 1 
            1 3 3 1 
           1 4 6 4 1 
          1 5 10 10 5 1 
         1 6 15 20 15 6 1 
        1 7 21 35 35 21 7 1 
       1 8 28 56 70 56 28 8 1 
      1 9 36 84 126 126 84 36 9 1 
     1 10 45 120 210 252 210 120 45 10 1 
    1 11 55 165 330 462 462 330 165 55 11 1 
   1 12 66 220 495 792 924 792 495 220 66 12 1 
  1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 
 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1 
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1

Я бы хотел, чтобы он был полностью центрирован. Я понял, что могу взять число или символы в нижней строке, вычесть количество символов в текущей строке и разделить это на два, чтобы получить желаемое количество пробелов в строке [что будет выглядеть так: cout.width ( (bottow_row_characters - current_row_characters) / 2)], но у меня возникли проблемы с реализацией этой идеи.

Я пробовал вычислить только нижнюю строку и сохранить в ней строку или массив, а затем использовать string.length () или sizeof (array), но ни один из них не работал. (sizeof всегда возвращает 4, что неверно)

Вот код:

#include <iostream>
#include <string>
using namespace std;


// Forward declaration of a function.
int Pascal (int row, int column);




 /* The main function.
  *
  * Parameters:
  *    none
  *
  * Return value:
  *    0 if we complete successfully, 1 if there was an error.
  */

 int main ()
 {

  // introduction

  cout << "\nPascal's Triangle!\n";
  cout << "(Pascal's triangle is made by taking the sum of two numbers\n";
  cout << "and placing that number directly underneath the two numbers.\n";
  cout << "This creates a triangular array of binomial coefficients)\n\n";


  // for loops to calculate and print out pascal's triangle

     for (int row = 0; row <= 15; row++)
    {

      cout.width(16 - row);

      for (int column = 0; column <= row; column++)
        {
          cout << Pascal(row, column) << " ";
        }

      cout << endl;
    }

    cout << endl;
}




/* This function calculates Pascal's triangle based on row and column position.
 *
 * Parameters:
 *    row, column
 *
 * Return value:
 *    the numbers in Pascal's triangle
 */

int Pascal (int row, int column)
{

  // if statements to calculate pascal's triangle through recursion

  if (column == 0)
    return 1;

  else if (row == column)
    return 1;

  else
    return Pascal(row - 1, column - 1) + Pascal(row - 1, column);
}
5
задан aedunn 21 September 2011 в 15:21
поделиться