#include <stdio.h>
int main() {
    int n,i,j;
    scanf("%d",&n);
    int arr[n][n],n1 = n/2;
    int left = n-1,right = n-1,up = n-1,down = n-1;
    int x = 1;
    while(n1--){
        for(j = n-1-right; j < right; j++)
            arr[n-1-right][j] = x++;
        right--;
        for(i = n-1-down; i < down; i++)
            arr[i][down] = x++;
        down--;
        for(j = left; j > n-1-left; j--)
            arr[left][j] = x++;
        left--;
        for(i = up; i > n-1-up; i--)
            arr[i][n-1-up] = x++;
        up--;
    }
    if(n%2 == 1)
    arr[n/2][n/2] = n*n;
    for(i = 0; i < n; i++){
        for(j = 0; j < n; j++)
            printf("%d ",arr[i][j]);
        printf("\n");
    }
    return 0;
}

还有哪里可以优化的吗各位大佬,尽力了