三角形图案

Triangle pattern

本文关键字:三角形      更新时间:2023-10-16

我正在尝试获得这样的输出

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

但是我的代码给出了错误的输出。我的输出是:

Please enter the size: 9
*********
        ********
       *******
      ******
     *****
    ****
   ***
  **
 *

我的代码是:

#include<iostream>
using namespace std;
int main (void)
{
    int row, column, size;
    cout << "Please enter the size: ";
    cin >> size;
    cin.ignore(999,'n');
    for (row = size; row <= size; row--)
    {
        if (row <= 0)
        {
            break;
        }
        else if (row == size)
        {
            for (column = 1; column <= size; column++)
            {
                cout << "*";
            }
        }
        else
        {
            for (column = row; column <= row; column--)
            {
                if (column <= 0)
                {
                    break;
                }
                cout << ' ';
            }
            for (column = row; column <= row; column--)
            {
                if (column <= 0)
                {
                    break;
                }
                cout << "*";
            }
        }
        cout << endl;
    }
    cout << endl;
    cout << "Please press enter to finish...";
    cin.ignore(999,'n');
    return 0;
}

我不知道出了什么问题以及它在哪里,但我认为问题可能出在 else 循环中。

你在这里做的是:

  1. 第一行打印 * s(大小(
  2. 如果不是首行打印size - loopCounter空格,则打印size - loopCounter * s

如您所见,此算法无法获得所需的形状。还有为什么你向后循环并检查没有负值?你不需要它。你真正想要的是:

  1. 用于生成列的外部循环(打印新行(
  2. 生成每行数据的内部循环

这里唯一重要的是如何生成每一行的数据。 如您所见,每行中的空格计数等于列的索引(从 0 开始(。

以下是您可以尝试的(我将内部循环分为两个循环(:

#include<iostream>
using namespace std;
int main(void)
{
    int size;
    cout << "Please enter the size: ";
    cin >> size;
    cin.ignore(999, 'n');
    for(int column = 0; column < size; ++column)
    {
        for(int spaces = 0; spaces < column; ++spaces)
        {
            cout << " ";
        }
        for(int starts = 0; starts < size - column; ++starts)
        {
            cout << "*";
        }
        cout << endl;
    }
    cout << "Please press enter to finish...";
    cin.ignore(999, 'n');
    return 0;
}

试着重新思考你的问题。您有很多复杂的代码来实现简单的事情。输出应如下所示:

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

所以需要注意一些事情:

  1. 行的长度都一样!
  2. 唯一的区别是空格的数量。如果我们有行,0 我们有 0 个空格,第 4 行有 4 个空格。

因此,有了这个,您的代码应该很简单:

// PSEUDO CODE
for row = 0  to max_rows
    for i = 0 to max_rows
        if (i < row)
            print a space
        else 
            print a *

这应该可以做到。