Devc++里能运行,但一直显示wronganswer,怎么修改?

#include<stdio.h>
int main()
{
    int n,i,j,k=1,p,q;
    scanf("%d",&n);
    int m=n;
    int a[n][n];
    i=0,j=n-1,p=0,q=1;
    while(k<=n*n)
    {
        while(i<m) a[i++][j]=k++;
        while(j>p) a[i-1][--j]=k++;
        while(i>q) a[--i-1][j]=k++;
        while(j<m-3) a[i-1][++j]=k++;
        --m;
        i=p,j=m-1,p++,q++;
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
           printf("%d ",a[i][j]);
        printf("\n");
    }
    return 0;
}

P1114 回文方阵
题目描述
在一个 n×n 的方阵中填入 n^2 个数,构成回文方阵

输入描述
输入一个 正整数 n, 占一行

输出描述
输出一个 nxn 的螺旋方阵,每行的数字之间用 1 个空格分开。

样例输入
5

样例输出
13 14 15 16 1

12 23 24 17 2

11 22 25 18 3

10 21 20 19 4

9 8 7 6 5

改成while(k<n*n)试试

用动态数组,供参考:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n, i, j; 
    scanf("%d", &n);    
    int** array = (int**)malloc(sizeof(int*) * n);
    for (i = 0; i < n; i++){
        array[i] = (int*)malloc(sizeof(int) * n);
        memset(array[i],0,sizeof(int) * n);
    }
    int  k = 1, x = 0, y = n - 1; 
    array[0][n - 1] = 1;   
    while (k < n * n)
    {
        while (x + 1 < n  && !array[x + 1][y]) array[++x][y] = ++k;
        while (y - 1 >= 0 && !array[x][y - 1]) array[x][--y] = ++k;
        while (x - 1 >= 0 && !array[x - 1][y]) array[--x][y] = ++k;
        while (y + 1 < n  && !array[x][y + 1]) array[x][++y] = ++k;
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            printf("%4d", array[i][j]);
        printf("\n");                
    }

    return 0;
}