(一)蛇形矩阵
在n*n的方阵里面填入1,2,3,......,n*n,要求填成蛇形。
例如n=4时方阵如下:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方阵中,多余的空格只是为了便于观察,不必严格输出。
题目中输入的n<=100.
1 #include <stdio.h> 2 #define maxN 100 3 int main(int argc, char *argv[]) 4 { 5 int a[maxN][maxN]={0},i,j,t; 6 int n; 7 int end; 8 scanf("%d",&n); 9 t=1; 10 i=0; 11 j=n-1; 12 a[i][j]=t; 13 14 t=2; 15 end=n*n; 16 while(t<end) 17 { 18 while( i+1<n && a[i+1][j]==0 ) { i++; a[i][j]=t; t++;} 19 while( j-1>=0 && a[i][j-1]==0 ) { j--; a[i][j]=t; t++;} 20 while( i-1>=0 && a[i-1][j]==0 ) { i--; a[i][j]=t; t++;} 21 while( j+1<n && a[i][j+1]==0 ) { j++; a[i][j]=t; t++;} 22 } 23 for(i=0;i<n;i++) 24 { 25 for(j=0;j<n;j++) 26 printf("%3d ",a[i][j]); 27 printf(" "); 28 } 29 return 0; 30 }
(二)蛇形矩阵
http://blog.163.com/lvan100@yeah/blog/static/6811721420107176921749
题目描述:
打印出如下格式的数据:
解题思路:
如果我们将矩阵变一下形状,如下:
这样就变成输出一个三角阵了,简单多了。只是呢,需要在某些行上做一些逆序变换。
奇数时变换奇数行; 偶数时变换偶数行。
最后按照斜线将数填入原来矩阵中,OK!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 int main() 3 { 4 int n; 5 int num=0; 6 int a[100][100]={0}; 7 int b[200][100]={0};//输入输出矩阵的大小,不超过100,当然自己可以修改上限值。 8 int i,j; 9 int temp; 10 11 scanf("%d",&n); 12 //构造三角阵数形的上半部分 13 for(i=0;i<n-1;i++) 14 { 15 for(j=0;j<=i;j++) 16 { 17 num++; 18 b[i][j]=num; 19 } 20 } 21 //够造三角形的下半部分 22 for(i=n-1;i<2*n-1;i++) 23 { 24 for(j=0;j<2*n-1-i;j++) 25 { 26 num++; 27 b[i][j]=num; 28 } 29 } 30 31 //某些行数据逆序 32 for(i=0;i<n;i+=2) 33 { 34 temp=0; 35 for(j=0;j<=i/2;j++) 36 { 37 temp=b[i][j]; 38 b[i][j]=b[i][i-j]; 39 b[i][i-j]=temp; 40 } 41 } 42 for(i=(n+1)/2*2;i<2*n-1;i+=2) 43 { 44 temp=0; 45 for(j=0;j<(2*n-1-i)/2;j++) 46 { 47 temp=b[i][j]; 48 b[i][j]=b[i][2*n-2-i-j]; 49 b[i][2*n-2-i-j]=temp; 50 } 51 } 52 53 //按照斜线将数填回原矩阵 54 for(i=0;i<n;i++) 55 { 56 for(j=0;j<=i;j++) 57 { 58 a[i-j][j]=b[i][j]; 59 } 60 } 61 for(i=n;i<2*n-1;i++) 62 { 63 for(j=i-n+1;j<n;j++) 64 { 65 a[i-j][j]=b[i][j-i+n-1]; 66 } 67 } 68 69 //输出矩阵 70 for(i=0;i<n;i++) 71 { 72 for(j=0;j<n;j++) 73 printf("%d ",a[i][j]); 74 printf(" "); 75 } 76 return 0; 77 }
(三)螺旋矩阵