分析:

本题可以对最后一行进行特殊处理,单独输出对应的星号,对于中间的行,先输出星号之前的内容即2*i-1之前的内容,首尾为星号,中间使用空格填充,然后在补全空格换行即可。

题解:

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

int main() {
    int n = 0;
    //循环读入n
    while(scanf("%d", &n) != EOF) {
        //外循环遍历每一行
        for(int i = 1; i <= n; ++i) {
                //对最后一行jin x
            if(i == n) {
                for(int j = 0; j < n; ++j)
                    printf("* ");
            } else { //内循环遍历每一列,首尾位置输出星号,否则输出空格即可
                for(int j = 1; j <= 2*i-1; ++j) {
                    if(j == 1)
                        printf("*");
                    else if(j == 2*i-1)
                        printf("*");
                    else 
                        printf(" ");
                }

                //输出剩下的空格即可
                for(int j = 0; j < (2*n)-(2*i-1); ++j)
                    printf(" ");
            }
            printf("\n"); 
        }
    }
    return 0;
}

总结:

复杂图案的绘制,单独行找出规律处理,特殊行特殊处理。