输出重复的ASCII菱形



我想要的输出看起来像这样:

**         **         **         **         **
****       ****       ****       ****       ****
******     ******     ******     ******     ******
********   ********   ********   ********   ********
********** ********** ********** ********** **********
********** ********** ********** ********** **********
********   ********   ********   ********   ********
******     ******     ******     ******     ******
****       ****       ****       ****       ****
**         **         **         **         **
**         **         **         **         **
****       ****       ****       ****       ****
******     ******     ******     ******     ******
********   ********   ********   ********   ********
********** ********** ********** ********** **********
********** ********** ********** ********** **********
********   ********   ********   ********   ********
******     ******     ******     ******     ******
****       ****       ****       ****       ****
**         **         **         **         **
**         **         **         **         **
****       ****       ****       ****       ****
******     ******     ******     ******     ******
********   ********   ********   ********   ********
********** ********** ********** ********** **********
********** ********** ********** ********** **********
********   ********   ********   ********   ********
******     ******     ******     ******     ******
****       ****       ****       ****       ****
**         **         **         **         **

我已经能够弄清楚如何获得第一个钻石形状与以下:

//inside of a void function called printDots()
char dot = '*';
char blank = ' ';
for (int i = 1; i < 6; i++) {
for (int k = 6; k > i; k--) { // right-shifts the first triangle
std::cout << blank;
}
for (int j = 0; j < i; j++) { // first triangle
std::cout << dot;
}
for (int j = 0; j < i; j++) { // second triangle (left-aligned)
std::cout << dot;
}
std::cout << "n";
}
for (int i = 1; i < 6; i++) {
for (int k = 0; k < i; k++) { // right-shifts the third triangle
std::cout << blank;
}
for (int j = 6; j > i; j--) { // third triangle
std::cout << dot;
}
for (int j = 6; j > i; j--) { // fourth triangle (left-aligned)
std::cout << dot;
}
std::cout << "n";
}

我正在努力弄清楚如何在所需的模式中重复这个形状。我试过添加更多的for循环来做同样的事情,我已经在做钻石的所有四个部分,但它似乎只是将星号垂直向下移动,破坏了图案,所有这些都没有达到任何水平输出。我可以用一个大的std::cout语句手动输出模式,但我试图弄清楚如何生成形状,而不仅仅是复制和粘贴它。任何建议吗?

我会重新设计你的应用程序,让你有一个函数打印一行菱形:

初始程序是这样的:

void printDiamondLine(int line)
{
// You write this part
}
int main()
{
for(int loop = 0; loop < sizeOfDiamong; ++loop)
{
printDiamondLine(loop);
std::cout << "n";
}
}

这应该打印出来:

**    Notice that each line is space filled on both sides.
****   
******  
******** 
**********
**********
******** 
******  
****   
**    

现在你可以修改代码来打印多个菱形:

int main()
{
// Looping over the whole things
// to get multiple lines of diamonds.
for(int vertical = 0; vertical < verticalDiamonds; ++vertical)
{
for(int loop = 0; loop < sizeOfDiamong; ++loop)
{
// Printing each line of the diamond
// multiple times across.
for(int horz = 0; horz < horzDiamonds; ++horz)
{
printDiamondLine(loop);
std::cout << " ";
}
std::cout << "n";
}
}
}

你必须一次考虑一行。第一个大的for循环生成每个菱形的上半部分,第二个大的for循环生成下半部分,对吗?

我只处理它的一半,因为它从上到下变成了相同的解:

// This produces 5 lines of output.
for (int i = 1; i < 6; i++) {
// This puts out leading spaces as required for this line
for (int k = 6; k > i; k--) { // right-shifts the first triangle
std::cout << blank;
}
// This puts out the diamond itself -- just this line
for (int j = 0; j < i; j++) { // first triangle
std::cout << dot;
}
// And this puts out the second half of the diamond -- just this line
for (int j = 0; j < i; j++) { // second triangle (left-aligned)
std::cout << dot;
}
// Note: THIS IS WHERE WE'LL INSERT MORE CODE
// And this is why you're only getting 1
std::cout << "n";
}

我注释了代码。到目前为止,你做得还不错。但现在,让我们保留所有的代码,但我将在最后计数之前添加一点。

for (int k = 6; k > i; k--) {
std::cout << blank;
}

这样做的作用是空格填充行,以便(到目前为止)每行都是相同的长度。

然后你所要做的就是将大部分代码包装到另一个for循环中。你会得到这样的结果:

for (int i = 1; i < 6; i++) {
for (int whichDiamond = 0; whichDiamond < 3; ++whichDiamond) {
for (int k = 6; k > i; k--) { // right-shifts the first triangle
std::cout << blank;
}
for (int j = 0; j < i; j++) { // first triangle
std::cout << dot;
}
for (int j = 0; j < i; j++) { // second triangle (left-aligned)
std::cout << dot;
}
for (int k = 6; k > i; k--) { // right-shifts the first triangle
std::cout << blank;
}
}
std::cout << "n";
}

你可以对第二个大循环做同样的事情。

现在,可能有更聪明的方法来做到这一点,但这只适用于您现有的代码。

相关内容

  • 没有找到相关文章

最新更新