说明:
例如 :当n=3时,则输出
1 2 3
6 4
5
当n=4时,则输出
1 2 3 4
9 10 5
8 6
7
程序码:
#include <stdlib.h> #include <stdio.h> int **InitArray_2( int **arrayname, const int row, const int col); void FreeArray( int ***p_arrayname); void PrintArray( int **arrayname, int row, int col); void OrderArray( int **arrayname, int dim); //全局变量 static int ROW=0,COL=0; int main() { int **array=NULL, dim=0; //输入要所要的维数 printf("请输入数据的维数 :\n"); scanf("%d",&dim); //初始化数组 array=InitArray_2( array, dim, dim); PrintArray( array, dim, dim); //按圈从外到内 OrderArray( array, dim); //打印数组 PrintArray( array, dim, dim); //释放分配空间 FreeArray( &array); return 0; } void PrintArray( int **arrayname, int row, int col) { ROW=row; COL=col; for( int i=0; i < row; i++) { for( int j=0; j < col; j++) printf( "%4d ",*(*(arrayname+i)+j)); printf("\n"); } printf("\n"); } int **InitArray_2( int **arrayname, const int row, const int col) { int g_CountData=0; arrayname = (int **) malloc(sizeof (int *) * row); for( int i = 0; i < row; i++) *(arrayname+i)=(int *) malloc(sizeof( int) * col); for( int j=0; j < row; j++) for( int k=0; k < col; k++) *(*(arrayname+j)+k)=g_CountData; return arrayname; } void FreeArray( int ***p_arrayname) { for( int i = 0; i < ROW; i++) { free(*(*p_arrayname+i)); *(*p_arrayname+i)=NULL; } free(*p_arrayname); *p_arrayname=NULL; printf("释放成功\n"); } void OrderArray( int **arrayname, int dim) { static int startpoint_x=0; static int startpoint_y=0; static int sm_count=1; static int sm_data=1; int row=0; int col=0; //根据相对的起始点设置变量的范围 if( dim <=0 ) return; else if (dim == 1) arrayname[row+startpoint_x][col+startpoint_y]=sm_count; else { //向右动 for( row = row + startpoint_x, col = col + startpoint_y; col < dim + startpoint_x; col++) arrayname[row][col] = sm_count++; //向下左动 for( col -= 2, row +=1; row < dim+startpoint_y; row++, col--) arrayname[row][col] = sm_count++; //向上动 for( col += 1, row -= 2; row > startpoint_x; row--) arrayname[row][col] = sm_count++; startpoint_x++; startpoint_y++; } OrderArray( arrayname, dim - 3); }