以C++为中心帕斯卡三角形输出
Centering Pascal's Triangle Output in C++
我已经成功地编写了一个代码输出帕斯卡三角形在一个有点三角形的形状使用cout。宽度(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
我希望它完全居中。我发现我可以取最下面一行的数字或字符,减去当前行的字符数,然后除以2,得到每行所需的空格数[看起来像: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 numbersn";
cout << "and placing that number directly underneath the two numbers.n";
cout << "This creates a triangular array of binomial coefficients)nn";
// 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);
}
我明白了。必须使用stringstream库将Pascal函数中的整型行转换为字符串。然后,您可以使用string.length()来计算字符串中有多少个字符。然后你做我之前解释过的数学运算来调整输出。
下面是我的代码:
/*
* Pascal's Triangle: Prints the first 15 rows of Pascal's triangle.
*
*/
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
using namespace std;
// Forward declaration of a function.
int Pascal (int row, int column);
int rowLength (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 numbersn";
cout << "and placing that number directly underneath the two numbers.n";
cout << "This creates a triangular array of binomial coefficients)nn";
// determination of how long the bottom row is
int bottom_row;
string bottom_row_characters;
stringstream out;
for (int row = 15; row <= 15; row++)
{
for (int column = 0; column <= row; column++)
{
out << " " << Pascal(row, column) << " ";
}
bottom_row_characters += out.str();
}
// for loops to calculate and print out pascal's triangle
for (int row = 0; row <= 15; row++)
{
cout.width((bottom_row_characters.length() - rowLength(row, 0)) / 2);
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);
}
/* This function converts a row from Pascal's Triangle from integers to a string
*
* Parameters:
* row, column
*
* Return value:
* a string representing a row in Pascal's triangle
*/
int rowLength (int row, int column)
{
int current_row;
string current_row_characters;
stringstream out;
for (int current_row = row; current_row <= row; current_row++)
{
for (int column = 0; column <= row; column++)
{
out << " " << Pascal(row, column) << " ";
}
current_row_characters += out.str();
}
return current_row_characters.length();
}
使用std::setw
:
cout << setw(5);
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 以C++输出一个数字三角形
- 如何使用"*"输出三角形
- 创建一个程序以输出三角形平方数的4个
- 输出一个三角形
- CGAL:当三角形没有时,来自邻居的输出
- 以C++为中心帕斯卡三角形输出
- c++生成帕斯卡三角形,输出错误