一字阵
是指将数字按大小顺序相连后,形成首尾相连的一字形的矩阵
常见形式
斜线型
1 2 6
3 5 7
4 8 9
分析思路
0 1 2
0 1 2 6
1 3 5 7
2 4 8 9
整个矩阵关于对角线对称分为上三角和下三角。则可以先构造上三角(包括斜线),再构造下三角。
如果以斜线划分,如(1)(2,3)(4,5,6)(7,8)(9),则每条斜线都有一个最大值和最小值。就可以定义变量num,从1开始递增,将num填入相应的位置。因此,我们可以找每条斜线的最小值,从最小值开始在斜线上填入num。相当于用笔从1开始按顺序连接矩阵。
难点在于如何根据矩阵的大小来确定每个点的行列关系,并递增或递减。我是通过纸笔分析得到的行列关系,然后手工模拟找出问题。具体关系在代码的注释中。
横线型
1 2 3
6 5 4
7 8 9
分析思路
横线型比斜线型简单,只需要通过判断行的奇偶性来控制循环变量,来填入num。
代码实现
斜线型
<pre name="code" class="cpp">#include<stdio.h>
int main()
{
int n,num,matrix[30][30];
int i,j;
while(scanf("%d",&n)>0)
{
num=0;
//遍历连接上三角的斜线,包括对角线
for(i=0; i<n; ++i)
{
if(i%2==0) //则最小值在下面
{
for(j=i; j>=0; --j) //上三角第i条斜线有i个点
matrix[j][