【CCF-CSP201412-2】Z字形扫描

1. 题目要求

在这里插入图片描述
在这里插入图片描述


2. 思考与解答

这道题目我想了比较久,找规律花的时间不多,但是如何模拟这个规律,调整输出的顺序,花了较多时间。思路如下:

  1. 每次扫描,一定是从左上角开始,到右下角为止。
  2. 数字个数非常有限,可以用二维数组模拟这一个图片矩阵;
  3. 有多个方向不同的扫描轨迹,如果把每个扫描轨迹划分为不同的组(互相平行的轨迹算做不同的扫描组),组号从 0 开始,那么就会有下面的扫描序列(给出依次扫描的每个元素的坐标序列从 0 开始,数组下标从 0 开始,以4x4矩阵为例):
    0 组:(0, 0)
    1 组:(0, 1) (1, 0)
    2 组:(2, 0) (1, 1) (0, 2)
    3 组: (0, 3) (1, 2) (2, 1) (3, 0)
    ... ...
    6(3, 3)
    输出的时候,就是从第 0 组开始从前往后依次输出对应坐标对应的数组元素的。
    可以发现如下规律:
    ① 每一组中各个元素坐标之和等于组号
    奇数组,横坐标从 0 开始往上增长;偶数组,横坐标从对应的组号开始,往下递减;
    修正,第二点规律对于后面几组数字的输出是不成立的,但是成立的规律是,奇数组元素的横坐标是顺序增长的,而偶数组的横坐标是倒序减少的,按照这个规律可以对奇数偶数组进行不同规则的排序。

找到了这个规律之后该如何模拟呢?
如果设置指针 i j0 开始按照规律一步一步调节,最后肯定是可以输出正确的结果的。不过这个规律看着非常简单,实际要直接通过指针模拟,我自己还是觉得特别复杂(尝试了好几次都不对)。

后来想到,数组一次一次调节 i j 指针的办法,虽然一定是可以做出来的,但是很难模拟出以上规律(我把它称为分组规律)。要想模拟出分组规律,需要寻找其他的办法。


之后想到了用结构体排序 + vector 的办法。
思路如下:
第一

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值