蛇形矩阵

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

 

posted on   华山青竹  阅读(1603)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2013-12-04 wikioi 1160 蛇形矩阵
2013-12-04 wikioi 1076 排序 【这里含冒泡、选择、插入以及快排库函数的调用】
2013-12-04 wikioi 1075 明明的随机数
2013-12-04 wikioi 1205 单词倒排
2013-12-04 wikioi 1206 保留两位小数 【考查浮点数输入输出】
2013-12-04 wikioi 2235 机票打折 【考查浮点数四舍五入的技巧】
2013-12-04 wikioi 1204 寻找子串位置

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示