螺旋矩阵(剑指OFFER 面试等等常用)
一、一般型

一个N阶矩阵,如上图所示打印出来
#include<stdio.h> int main(void) { int a[100][100]; int i,j,k; int n,m; int key; while(scanf("%d",&n)!=EOF) { key=n/2;m=1; for(k=1;k<=n;k++) { for(i=k-1,j=k-1;j<=n-k;j++) { a[i][j]=m;m++; } for(i=k,j=n-k;i<=n-k;i++) { a[i][j]=m;m++; } for(i=n-k,j=n-k-1;j>=k-1;j--) { a[i][j]=m;m++; } for(i=n-k-1,j=k-1;i>k-1;i--) { a[i][j]=m;m++; } } for(i=0;i<n;i++) {{for(j=0;j<n-1;j++) printf("%d ",a[i][j]);} printf("%d\n",a[i][n-1]);} } return 0; }

此类矩阵如上,类似思想,仅仅倒回来赋值即可
#include<stdio.h> int main(void) { int a[100][100]; int i,j,k; int n,m; int key; while(scanf("%d",&n)!=EOF) { key=n/2;m=n*n; for(k=1;k<=n;k++) { for(i=k-1,j=n-k;j>=k-1;j--) { a[i][j]=m;m--; } for(i=k,j=k-1;i<=n-k;i++) { a[i][j]=m;m--; } for(i=n-k,j=k;j<=n-k;j++) { a[i][j]=m;m--; } for(i=n-k-1,j=n-k;i>=k;i--) { a[i][j]=m;m--; } } for(i=0;i<n;i++) {{for(j=0;j<n-1;j++) printf("%2d ",a[i][j]);} printf("%2d\n",a[i][n-1]);} } return 0; }

浙公网安备 33010602011771号