所谓“螺旋方阵”,是指对任意给定的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 813 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; }
原文地址:http://blog.csdn.net/jason_wang1989/article/details/43833597