蛇形矩阵的创建

本文详细介绍了如何创建蛇形矩阵,通过分析样例,发现打印规律,并利用状态变量控制上行和下行交替进行,解决特殊情况,最终实现蛇形矩阵的生成。代码部分展示了实现该算法的具体步骤。
摘要由CSDN通过智能技术生成

这是记录我做的一道关于蛇形矩阵的文章

1 题目描述

【问题描述】
将1,2,…,n*n个自然数,按蛇形方式存放在二维数组A[n][n]中。“蛇型”方式,即是按“副对角线”平行的各对角线,从左下到右上,再从右上到左下,存放n2个整数。例如:

1 3 4
2 5 8
6 7 9

【输入形式】 输入数组的阶数n。
【输出形式】 打印数据元素按蛇形排列的数组,整数打印的域宽为4。
【样例输入】3
【样例输出】
1 3 4
2 5 8
6 7 9
【样例说明】矩阵的阶数为3,打印按蛇形存放的1~9,注意域宽为4。

2 解决思路

首先一开始,我就开始猜规律,妄想用一种规律来解这道题目。很长很长时间后😅😅,发现这似乎不现实。然后我仿着大脑的思路,试图解决这道问题,结果就解决了。猛然之间有了一种“编程就是仿照人的思路告诉计算机怎么做的过程”感悟。

我们来看样例,发现可以有第一次打印1个,,第二次打印两个,第三次打印3个,第四次打印2个,第五次打印1个这样的规律。这样就可以用for循环控制打印个数。

然后,每一次打印分为两种状态,分别是上行,下行。也就是左下到右上,右上到左下。这样我们可以定义一个记录状态的变量。并且我们还发现。上行和下行是交替进行的。这就相当于解决了一大半问题。

最后一个问题,如何解决第一次到第二次这样的过度呢。我们发现其实一共有两种过度。一种是向下。一种是向右,这样我们定义两种状态。这两种状态也是交替进行的。等等,好像不是,发现如果到了右上角的元素,下一个状态不会改变,再找一找还有没有例外,。。。。。没了。于是,我们就可以针对这种例外做一个判断。

之后,这道题目就做出来了。😁

3 代码

#include<stdio.h>
int main()
{
   
    int data[100][100];
    int n;
    scanf("%d",&n);
    int point = 2;
    int q=1,w=0;
    int i,j;
    data[0][0] = 1;
    int flag = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值