5 条题解

  • 0
    @ 2025-11-18 21:23:40
    #include<stdio.h>
    int main()
    {
        int n;
        int a[100][100]={0};
        scanf("%d",&n);
        if(n==1)
        {
            printf("1");
            return 0;
        }
        if(n%2!=0)//奇数比偶数多一个最中间的值
        {
            a[n/2][n/2]=n*n;
        }
        int j=0;
        for(int i=0;i<n/2;i++)//控制次数 一层就是一次循环
        {//注意:每层小循环的区间 左闭右开
            for(int k=0;k<n-1-2*i;k++)//上到下
            {
                a[i+k][n-1-i]=++j;
            }
            for(int k=0;k<n-1-2*i;k++)//右到左
            {
                a[n-1-i][n-1-k-i]=++j;
            }
            for(int k=0;k<n-1-2*i;k++)//下到上
            {
                a[n-1-k-i][i]=++j;
            }
            for(int k=0;k<n-1-2*i;k++)//左到右
            {
                a[i][i+k]=++j;
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int k=0;k<n;k++)
            {
                printf("%d ",a[i][k]);
            }
            printf("\n");
        }
        return 0;
    }
    

    信息

    ID
    131
    时间
    3000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    638
    已通过
    211
    上传者