首页 > 解决方案 > 如何彼此相邻打印倒置的半星金字塔图案?

问题描述

我想在彼此旁边显示一个倒置的半星金字塔图案。这是所需的输出

这是我的代码:

#include <iostream>
using namespace std;
int main()
{
  int n, x, y, k;
  cout << "Enter Number of Rows: ";
  cin >> n;
  for (x = n; x >= 1; x--)
  {
        for (y = 1; y <= x; y++)
        {
              if (y <= x)
                    cout << "*";
              else
                    cout << " ";
        }
        for (y = n; y >= 1; y--)
        {
              if (y <= x)
                    cout << "*";
              else
                    cout << " ";
        }
        cout << "\n";
  }
  return 0;

}

这是我运行代码后得到的输出。 所需的行数是 10。运行我的代码后,输出与我预期的不同。请告诉我如何使它正确。谢谢你。

标签: c++

解决方案


我在问题中看到了一些对称性

  • 对于 n 行,我们打印 2*n+1 个字符
  • 对于第 y 行,如果 x 小于 ny 或大于 n+y,我们将打印一个星号

所以我用更复杂的if语句编写了一个双循环。我不得不调整if语句直到它起作用。

#include <iostream>
using namespace std;
int main()
{
    int n, x, y;
    cout << "Enter Number of Rows: ";
    cin >> n;

    for (y = 0; y < n; y++)
    {
        for (x = 2*n+1; x > 0; x--)
        {
            if ((x > n+y+1) || (x < n-y+1))
                cout << "*";
            else
                cout << " ";
        }
        cout << "\n";
    }
    return 0;
}

推荐阅读