蛇形矩阵

简介: (一)蛇形矩阵在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

(一)蛇形矩阵
在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

题目描述:

打印出如下格式的数据:

解题思路:
如果我们将矩阵变一下形状,如下:

这样就变成输出一个三角阵了,简单多了。只是呢,需要在某些行上做一些逆序变换。
奇数时变换奇数行; 偶数时变换偶数行
最后按照斜线将数填入原来矩阵中,OK!

 

 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

 

(三)螺旋矩阵

http://www.cnblogs.com/huashanqingzhu/p/4098564.html

 

相关文章
|
7月前
|
算法 C++
C++020-C++因数,公因数,公倍数
C++020-C++因数,公因数,公倍数
C++020-C++因数,公因数,公倍数
一个求公约数和公倍数的有趣求法
一个求公约数和公倍数的有趣求法
64 0
|
存储
蛇形矩阵和矩阵转置
蛇形矩阵和矩阵转置
59 0
|
算法 C语言 C++
【数论】最大公约数、约数的个数与约数之和定理
先来科普下什么是约数:当a能被b整除,我们就说b为a的约数,b的倍数为a
135 0
|
Java C++
环形矩阵(螺旋矩阵)&&蛇形矩阵
环形矩阵(螺旋矩阵)&&蛇形矩阵
152 0
|
测试技术
多少个约数
多少个约数
108 0
多少个约数