如矩阵
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
找出规律,并打印出一个N*N的矩阵;规律就是从首坐标开始顺时针增大,所以
1.需要一个变量m来递增记录进度。
2.注意各个转折点。
具体代码实现如下:
#include <stdio.h> #define N 5 int a[N][N]={0}; void fun(int n) { int i,j; int m=1; for(i=0;i<n/2;i++) { for(j=i;j<n-i;j++) //上边的一行 { a[i][j]=m++; } for(j=i+1;j<n-i;j++) //右边的一列 { a[j][n-i-1]=m++; } for(j=n-i-2;j>i;j--) //下边的一行 { a[n-i-1][j]=m++; } for(j=n-i-1;j>i;j--) //左边的一列 { a[j][i]=m++; } } if(n%2==1) a[n/2][n/2]=m; } int main(void) { int i,j; fun(N); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%5d",a[i][j]); } printf("\n"); } return 0; }
别忘记考虑到n为奇数的情况下,需要加上最后的判断
结果如下:
[[email protected] tmp]# ./2 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13
时间: 2024-11-10 07:24:49