首页 > 解决方案 > 如何为以下星形图案添加空间?

问题描述

如何打印以下模式?

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

我们如何在模式的前半部分添加空格?我只设法使模式的后半部分正确:

#include <iostream>

using namespace std;

void printpattern(int n)
{
    for (int r = 0; r <= n; r++)
    {
        for (int z = 0; z <= r; z++) {
            cout << "*";
        }

        cout << endl;
    }
}

int main()
{
    int n = 5;
    printpattern(n);
}

标签: c++loopsfor-loop

解决方案


如果一个人害怕使用循环,那么这些东西当然可以通过递归和一点数学来解决:

#include <iostream>

void pattern(int n, int p = 0)
{   
    if (!n) return;
    if (!p) { pattern(2 * n * n - n, n); return; }
    int k = --n / p, o = n % p + 1, t = o - (p - k);
    std::cout.put(" *"[k >= p && t < p || k < p && t >= 0]);
    --o || std::cout.put('\n');
    pattern(n, p);
}

推荐阅读