7-9 螺旋方阵(20 分)

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:

输入在一行中给出一个正整数N(<10)。

输出格式:

输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:

5

输出样例:

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

#include<stdio.h>
int main()
{
    int a,b,c=1,d,shu[10][10]={0},m=0,n=0,e;
    scanf("%d",&a);
    if(a%2==0)d=a/2;
    else d=a/2+1;
    shu[m][n]=1;
    printf("%d\n",d);
    for(b=0;b<d;b++)
    {
        while(++n<a&&shu[m][n]==0)
        {
            shu[m][n]=++c;
        }n--;
        while(++m<a&&shu[m][n]==0)
        {
            shu[m][n]=++c;
        }m--;
        while(--n>=0&&shu[m][n]==0)
        {
            shu[m][n]=++c;
        }n++;
        while(--m>=0&&shu[m][n]==0)
        {
            shu[m][n]=++c;
        }m++;
    }
    printf("%d\n",shu[0][0]);
    for(b=0;b<a;b++)
    {
        for(e=0;e<a;e++)
        {
            printf("%3d",shu[b][e]);
        }
        printf("\n");
     }
     return 0;
 } 这是我的思路
#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
  int N,i,j,n,num=1; 
  int a[10][10]={0}; 
  printf("输入你要输出的几阶中断:"); 
  scanf("%d",&N); 
   
   for(n=0;n<=N/2;n++) 
   { 
     for(j=n;j<=N-n-1;j++) 
     a[n][j]=num++; 
      
     for(i=n+1;i<N-n-1;i++) 
     a[i][N-n-1]=num++; 
      
     for(j=N-n-1;j>n;j--) 
     a[N-n-1][j]=num++; 
      
     for(i=N-n-1;i>n;i--) 
     a[i][n]=num++; 
   }   
   //输出螺旋矩阵  
   for(i=0;i<N;i++) 
   { 
     for(j=0;j<N;j++) 
     printf("%2d ",a[i][j]); 
    
     printf("\n"); 
   }   
    
   system("pause"); 
   return 0; 
}    这是网上的