三角形图案

时间:2018-04-23 05:55:55

标签: c++

我想获得像

这样的输出
*****
 ****
  ***
   **
    *

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

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;
}

我不知道什么是错的,它在哪里,但我认为问题可能在于其他循环。

2 个答案:

答案 0 :(得分:1)

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

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

关于这一点需要注意的一些事项:

  1. 行的长度都一样!
  2. 唯一的区别是空格数。如果我们有行,0我们有0个空格,第4行有4个空格。
  3. 因此,您的代码应该很简单:

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

    那应该这样做。

答案 1 :(得分:1)

你在这里做的是:

  1. 打印* s作为第一行(大小)
  2. 如果不是第一行打印size - loopCounter空格,则打印size - loopCounter * s
  3. 正如您所看到的,此算法无法为您提供所需的形状。另外为什么你向后循环并检查没有负值?你不需要它。你真正想要的是:

    1. 用于生成列的外循环(打印新行)
    2. 用于生成每行数据的内部循环
    3. 这里唯一重要的是如何生成每一行的数据。正如您所看到的,每行中的空格数等于列的索引(从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;
      }