zigzag数组(蛇形数组)C++实现

Zigzag数组,又称蛇形数组,是按照'之'字形排列的数组。本文介绍了如何使用C++编程实现这种排列方式。通过分析同一斜线上元素的特性,提出两种情况下的计算公式:对于前N个斜线,元素个数递增,公式为(s+1)*s/2;对于第N个及之后的斜线,元素个数递减,采用减法计算剩余元素个数。
摘要由CSDN通过智能技术生成

解析:zigzag数组是一个“之”字形排列的数组。也被称为蛇形数组。

     0     2     3     9    10    20    21    35
     1     4     8    11    19    22    34    36
     5     7    12    18    23    33    37    48
     6    13    17    24    32    38    47    49
    14    16    25    31    39    46    50    57
    15    26    30    40    45    51    56    58
    27    29    41    44    52    55    59    62
    28    42    43    53    54    60    61    63

由于对同一斜线上的元素,s=i+j为常数
1.对于第n个(n<N)斜线:
每一斜线个数比上一行多一个,则每一斜线的第一个值表示了在该斜线之前元素的个数,即一个累加 :
(s+1)*s/2
斜线中的任意元素可表示为s*(s+1)/2+((i+j)%2==0 ? i : j)

2.同理对于第n个(n>=N)的斜线:
每斜线的元素个数开始减少,等差数组不适用,为方便起见,可以用减法计算元素个数,
剩余元素的斜线数目:s1=&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值