Run ID 作者 问题 语言 测评结果 Time Memory 代码长度 提交时间
85859 梁敖铭 螺旋矩阵 C++ Wrong Answer 0 MS 200 KB 1433 2024-07-20 21:16:23

Tests(0/10):


Code:

#include<stdio.h> #include<malloc.h> int main() { int **p=NULL; int n,i,j,k=1,line,row; printf("请输入矩阵的行数:"); scanf("%d",&n); if((p=(int**)malloc(sizeof(int**)*n))==NULL)//根据行数分配内存,分配双指针 { printf("不能分配内存!!!\n"); return 1; } for(i=0;i<n;i++) { if((p[i]=(int*)malloc(sizeof(int*)*n))==NULL)//为每一行分配指针,每一行有n个数 { printf("不能分配内存!!!\n"); return 1; } } //螺旋矩阵思想是:随着k的增大,矩阵最外围先被幅值,最外面一圈赋值完成后,再向里面一层赋值,如此循环 //所以可以按照这个思想,每转一圈为一个大循环,一直循环下去,直至k<=n*n; for(i=0,j=0;k<=n*n;i++,j++) { for(row=j;row<n-j;row++) { p[i][row]=k++; } for(line=i+1;line<n-i;line++) { p[line][n-j-1]=k++; } for(row=n-j-2;row>=j;row--) { p[n-i-1][row]=k++; } for(line=n-i-2;line>i;line--) { p[line][j]=k++; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%-6d",p[i][j]); } printf("\n"); } for(i=0;i<n;i++)//分别释放每一行的指针 { free(p[i]); p[i]=NULL; } free(p);//释放双指针 p=NULL; return 0; }


Run Info:

------Input------
5
------Answer-----
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
------Your output-----
请输入矩阵的行数: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