用“*”打印图案,实在搞不懂

img

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/613096687866150.jpg "#left")
真的不知道怎么搞的,请帮忙看看呗

//由于字符等宽度与高度不是相等的,长宽字符一样多是画不出正方形的。下面仅供参考。谢谢!

//提供思路,细节自己修改

img

#include <stdio.h>
void draw(int n)
{
    if(n<=16 || n>512)return;
    int m=n;
    int arr[m][n];
    int i,j;
    //初始化
    for(i=0;i<m;i++)
    {
        for(j = 0;j <n;j++)
        {
            arr[i][j]=0;
        }
    }
    //标记位置
    for(i=0;i<m;i++)
    {
        for(j = 0;j <n;j++)
        {
            if(i==0 || j==0 || i==m-1 || j==n-1)
            {
                arr[i][j]=1;
                printf("*");
            }
            else if(i<=m/2 && j<=n/2 && i+j==n/2 ||  (j>=n/4&&j<=n/2 && i==m/4) ||(i>=m/4&&i<=m/2&&j==n/4))
            {
                //作出1/4然后根据对称关系翻转即可画出剩余3/4图形
                arr[i][j]=1;
                arr[m-i-1][j]=1;
                arr[i][n-j-1]=1;
                arr[m-i-1][n-j-1]=1;
                printf("*");
            }
            else if(i+j==n*3/4&&i>m/4 && i<m/2 &&j>n/4 && j<n/2)
            {
                arr[i][j]=1;
                arr[m-i-1][j]=1;
                arr[i][n-j-1]=1;
                arr[m-i-1][n-j-1]=1;
                printf("*");
            }
            else
            printf(" ");
        }
        printf("\n");
    }
    //输出
    for(i=0;i<m;i++)
    {
        for(j = 0;j <n;j++)
        {
            if(arr[i][j]==1)printf("*");
            else
            printf(" ");
        }
        puts("");
    }
    puts("");
}
int main(int argc, char** argv){
    draw(28);
    return 0;
}


仔细观察规律,合理运用循环