gpt4 book ai didi

c++ - 在 C++ 中居中 Pascal 的三角形输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:49 31 4
gpt4 key购买 nike

我已经使用 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);
}

最佳答案

我想通了。您必须使用 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 numbers\n";
cout << "and placing that number directly underneath the two numbers.\n";
cout << "This creates a triangular array of binomial coefficients)\n\n";


// 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();
}

关于c++ - 在 C++ 中居中 Pascal 的三角形输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502344/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com