求求大佬看看问题在哪?
查看原帖
求求大佬看看问题在哪?
362578
lcvweixiao楼主2020/10/27 15:56
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m,n,k,i,j,N;
int *p= NULL;
scanf("%d",&N);
p=(int *)calloc(N*N,sizeof(int));
    p[0*N+(N-1)/2]=1;
p[(N-1)*N+(N+1)/2]=2;
for(k=3;k<=N*N;k++)
{
    for(i=0;i<=N-1;i++) /*若 (K−1) 在第一行但不在最后一列,则将 K 填在最后一行, (K-1) 所在列的右一列*/
    {
        if(p[0*N+i]==k-1&&i!=N-1)
            p[(N-1)*N+i+1]=k;
    }
    if(p[(N-1)*N+i+1]==k)
    {
        m=N-1;
        n=i+1;
        continue;
    }
    for(i=0;i<=N-1;i++) /*若 (K-1) 在最后一列但不在第一行,则将 K 填在第一列, (K-1)所在行的上一行*/
    {
        if(p[i*N+N-1]==k-1&&i!=0)
            {
        p[(i-1)*N+0]=k;
        m=i-1;
        n=0;
        continue;
             }
    }
    if(p[0*N+N-1]==k-1) /*若 (K-1)在第一行最后一列,则将 K 填在 (K-1) 的正下方*/
    {
        p[1*N+N-1]=k;
        m=1;
        k=N-1;
        continue;
    }
    /*   若 (K-1) 既不在第一行,也不在最后一列,如果 (K-1) 的右上方还未填数,
         则将 K 填在 (K-1) 的右上方,否则将 K 填在 (K-1) 的正下方。  */
    for(i=0;i<=N-1;i++)
    {
        if(p[0*N+i]!=k-1&&p[i*N+N-1]!=k-1&&p[(m-1)*N+k+1]==0)
            p[(m-1)*N+k+1]=k;
        else p[(m+1)*N+k]=k;
    }
}
for(i=0;i<=N-1;i++)
{
    for(j=0;j<=N-1;j++)
        printf(" %d",p[i*N+j]);
        printf("\n");
}
free(p);
return 0;
}

2020/10/27 15:56
加载中...