【算法】蛇形阵:一字阵和回形阵(螺旋阵)的原理及C实现

本文介绍了如何用C语言实现一字阵的斜线型和横线型,以及回字阵(螺旋阵)的收缩型和扩张型。分析了各类阵型的思路,并给出了代码实现与运行示例。
摘要由CSDN通过智能技术生成

一字阵

是指将数字按大小顺序相连后,形成首尾相连的一字形的矩阵

常见形式

斜线型

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][
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值