(C++的方法求解的问题)

目前这个问题程序复杂无所谓,只要能出运行结果就好。
一定要用C++的方法解答,不然无法采纳,谢谢配合

img

是空心的吗?还是实心的?

问题在哪

这几个图形其实很类似,找到打印规律就可以了,比如打印空心菱形:

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i<n; i++)                    // 分为上半层打印和下半层打印,首先打印上半层,外部控制行数循环i
    {
        for (int j = 0; j<(n - 1 - i); j++)          // 打印出的符号只有前面的空格和后面的*号,而控制打印空格和*号的循环应是同级循环
        {
            cout << " ";                       // 首先打印空格,在上半层中,空格的个数是逐渐减少的,所以for语句中的判决条件
        }                                      // 应控制逐渐变小来控制空格的输出越来越少

        for (int j = 0; j < 2 * i + 1; j++)            // 打印*号时,因为*号的个数是逐渐增加的,所以应控制循环条件逐渐增大
        {
            if (j == 0 || j == 2 * i)
                cout << "*"; //在两端时打印*号
            else
                cout << " ";
        }
        cout << endl;
    }
    for (int i = 0; i < n - 1; i++)                 // 下半层打印开始
    {
        for (int j = 0; j < i + 1; j++)             // 和上半层空格相反,空格数是逐渐增加的
        {
            cout << " ";
        }
        for (int j = 0; j < 2 * (n - 1) - (1 + 2 * i); j++)      // *号的循环控制语句的判决条件我得不出来,看的别人的,但是思路是这样嘛,觉得自己蠢毙了
        {
            if (j == 0 || j == 2 * (n -  i - 2))
                cout << "*";
            else
                cout << " ";
        }
        cout << endl;
    }
    return 0;
}

img

#include
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 0; i<n; i++)
for (int j = 0; j<(n - 1 - i); j++)
{
cout << " ";
}
for (int j = 0; j < 2 * i + 1; j++)
{
if (j == 0 || j == 2 * i)
cout << "";
else
cout << " ";
}
cout << endl;
}
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < i + 1; j++)
{
cout << " ";
}
for (int j = 0; j < 2 * (n - 1) - (1 + 2 * i); j++)
{
if (j == 0 || j == 2 * (n - i - 2))
cout << "
";
else
cout << " ";
}
cout << endl;
}
return 0;
}

找到规律,switch判断要哪种吧