码迷,mamicode.com
首页 > 编程语言 > 详细

数组-13. 螺旋方阵(20)

时间:2015-02-15 10:43:32      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:pat   c   

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

输入格式:

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

输出格式:

输出NxN的螺旋方阵。每行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>
#define SIZE 10  

int main()
{
  int a[SIZE][SIZE]={0};
  int N;
  scanf("%d",&N);
  
  //每条边的下标在x,y上的增量
  int dx[]={0,1,0,-1};
  int dy[]={1,0,-1,0};

  int x=0,y=0,nx,ny,i,k=0; //k用来表示边,k=0,1,2,3  分别代表上,右,下,左

  for(i=0;i<N*N;i++)
  {
    a[x][y]=i+1;
    nx=x+dx[k];  //下一个坐标的位置
    ny=y+dy[k];

    if(nx<0 || nx==N || ny<0 || ny==N || a[nx][ny]!=0) //下标越界或下标上已经赋值,转变方向
    {
      k=(k+1)%4;
      nx=x+dx[k];
      ny=y+dy[k];
    }

    x=nx;
    y=ny;
  }

  int j;
  for(i=0;i<N;i++)
  {
    for(j=0;j<N;j++)
    {
        printf("%3d",a[i][j]);
    }
    printf("\n");
  }
  return 0;
}


数组-13. 螺旋方阵(20)

标签:pat   c   

原文地址:http://blog.csdn.net/jason_wang1989/article/details/43833597

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!