使用 setw 构建金字塔
using setw to build a pyramid
我的输出应该是四个三角形和一个金字塔。我设法得到了四个三角形,但无法弄清楚金字塔。任何帮助都会很棒。 (我还必须使用 setw 和 setfill)。
输出是一个左对齐的三角形,然后倒置左对齐。
右对齐三角形,然后右对齐三角形倒置。
这是我当前的输出:
#include <iostream>
#include <iomanip>
using namespace std;
//setw(length)
//setfill(char)
int height; //Number of height.
int i;
int main()
{
cout << "Enter height: ";
cin >> height;
//upside down triangle
for (int i=height; i>=1; i--){ //Start with given height and decrement until 1
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n"; //line break between
//rightside up triangle
for (int i=1; i<=height; i++){ //Start with 1 and increment until given height
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n";
//right aligned triangle
for (int i=1; i<=height; i++){ //Start with 1 and increment until given height
cout << setfill (' ') << setw(i-height) << " ";
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n";
//upside down/ right aligned triangle
for (int i=height; i>=1; i--){ //Start with given height and decrement until 1
cout << setfill (' ') << setw(height-i+1) << " ";
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n";
//PYRAMID
for (int i=1; i<=height; i++){ //Start with 1 and increment until given height
cout << setfill (' ') << setw(height-i*3) << " "; //last " " is space between
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
}//end of main
在您绘制金字塔时,对setfill('*')
的调用将否决上一行对setfill(' ')
的调用。 每行只能有一个填充字符集
您可以通过 "hand" 尝试 "drawing" 星号,如下所示:
for (int i = 1; i <= height; i++) {
cout << setfill (' ') << setw(height - ((i - 1) * 2 + 1) / 2);
for (int j = 0; j < (i - 1) * 2 + 1; j++)
cout << '*';
cout << "\n";
}
最好在开始考虑如何实现之前定义所需的输出。
假设您需要一个高度为 5 的金字塔,如您的示例所示。
这意味着顶行将有一个 *。
在完美世界中第二排会有两个,但在屏幕上很难实现。那么也许它可以有 3 个。
在这种情况下,高度 5 的最终结果将是:1、3、5、7 和 9 *。
(我尝试在这里绘制但没有成功,我建议您在任何文本编辑器中绘制它以帮助可视化最终结果)。
现在关于实现:
请注意,重要的是*之前的空格数量。之后的空白将自行发生。
*之前应该出现多少空格?
如果您尝试在文本编辑器中绘制金字塔,您会发现它取决于底行的宽度和每个特定行中 * 的数量。
另外,如果你仔细观察,空白会形成一个三角形...
添加:
只是想让您知道 - 如果您选择将每个后续行中的 * 数量增加 2 而不是 1,那么您原来的方法也行得通。
int BottomRowWidth = 1 + 2 * (height - 1);
int BlankNumber = (BottomRowWidth - 1) / 2;
int row, width;
for (row = 1, width =1; (row <= height); row++, width = width+2, BlankNumber--)
{
if (BlankNumber > 0)
{
cout << setfill(' ') << setw(BlankNumber) << " ";
}
cout << setfill('*') << setw(width) << "*";
cout << endl;
}
我的输出应该是四个三角形和一个金字塔。我设法得到了四个三角形,但无法弄清楚金字塔。任何帮助都会很棒。 (我还必须使用 setw 和 setfill)。
输出是一个左对齐的三角形,然后倒置左对齐。 右对齐三角形,然后右对齐三角形倒置。
这是我当前的输出:
#include <iostream>
#include <iomanip>
using namespace std;
//setw(length)
//setfill(char)
int height; //Number of height.
int i;
int main()
{
cout << "Enter height: ";
cin >> height;
//upside down triangle
for (int i=height; i>=1; i--){ //Start with given height and decrement until 1
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n"; //line break between
//rightside up triangle
for (int i=1; i<=height; i++){ //Start with 1 and increment until given height
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n";
//right aligned triangle
for (int i=1; i<=height; i++){ //Start with 1 and increment until given height
cout << setfill (' ') << setw(i-height) << " ";
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n";
//upside down/ right aligned triangle
for (int i=height; i>=1; i--){ //Start with given height and decrement until 1
cout << setfill (' ') << setw(height-i+1) << " ";
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
cout<< "\n";
//PYRAMID
for (int i=1; i<=height; i++){ //Start with 1 and increment until given height
cout << setfill (' ') << setw(height-i*3) << " "; //last " " is space between
cout << setfill ('*') << setw((i)) <<"*";
cout << "\n";
}
}//end of main
在您绘制金字塔时,对setfill('*')
的调用将否决上一行对setfill(' ')
的调用。 每行只能有一个填充字符集
您可以通过 "hand" 尝试 "drawing" 星号,如下所示:
for (int i = 1; i <= height; i++) {
cout << setfill (' ') << setw(height - ((i - 1) * 2 + 1) / 2);
for (int j = 0; j < (i - 1) * 2 + 1; j++)
cout << '*';
cout << "\n";
}
最好在开始考虑如何实现之前定义所需的输出。 假设您需要一个高度为 5 的金字塔,如您的示例所示。 这意味着顶行将有一个 *。 在完美世界中第二排会有两个,但在屏幕上很难实现。那么也许它可以有 3 个。 在这种情况下,高度 5 的最终结果将是:1、3、5、7 和 9 *。 (我尝试在这里绘制但没有成功,我建议您在任何文本编辑器中绘制它以帮助可视化最终结果)。
现在关于实现: 请注意,重要的是*之前的空格数量。之后的空白将自行发生。 *之前应该出现多少空格? 如果您尝试在文本编辑器中绘制金字塔,您会发现它取决于底行的宽度和每个特定行中 * 的数量。 另外,如果你仔细观察,空白会形成一个三角形...
添加: 只是想让您知道 - 如果您选择将每个后续行中的 * 数量增加 2 而不是 1,那么您原来的方法也行得通。
int BottomRowWidth = 1 + 2 * (height - 1);
int BlankNumber = (BottomRowWidth - 1) / 2;
int row, width;
for (row = 1, width =1; (row <= height); row++, width = width+2, BlankNumber--)
{
if (BlankNumber > 0)
{
cout << setfill(' ') << setw(BlankNumber) << " ";
}
cout << setfill('*') << setw(width) << "*";
cout << endl;
}