不是第一次写这种输出题了,要点无非是避免硬编码和利用数学规律确认遍历时的空格和字符的个数,这次用模块化的方式实现;修改行数n可以输出目标图形。

#include<bits/stdc++.h>
using namespace std;
char c;

void cout1()
{
    cout << " ";
}
void cout2()
{
    cout << c;
}

int main()
{
    cin >> c;
    int n=5;
    int m = (n+1)/2;
    for(int i = 0; i < m; i++)
    {
        int a2 = i*2+1;
        int a1 = (n-a2)/2;
        for(int j = 0; j < a1; j++) cout1();
        for(int j = 0; j < a2; j++) cout2();
        for(int j = 0; j < a1; j++) cout1();
        cout << endl;
    }
    for(int i = m-2; i >=0; i--)
    {
        int a2 = i*2+1;
        int a1 = (n-a2)/2;
        for(int j = 0; j < a1; j++) cout1();
        for(int j = 0; j < a2; j++) cout2();
        for(int j = 0; j < a1; j++) cout1();
        cout << endl;
    }
}