(一)蛇形矩阵

在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("\n");
28 }
29 return 0;
30 }


 

(二)蛇形矩阵

http://blog.163.com/lvan100@yeah/blog/static/6811721420107176921749

题目描述:

打印出如下格式的数据:

蛇形矩阵_#include


解题思路:


如果我们将矩阵变一下形状,如下:


蛇形矩阵_i++_02


这样就变成输出一个三角阵了,简单多了。只是呢,需要在某些行上做一些逆序变换。


奇数时变换奇数行; 偶数时变换偶数行。


最后按照斜线将数填入原来矩阵中,OK!


 


蛇形矩阵_蛇形矩阵_03蛇形矩阵_逆序_04


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("\n");
75 }
76 return 0;
77 }

View Code