You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现指定区间内从起始值交替上下计数的遍历逻辑

交替区间计数实现方案

需求梳理

实现逻辑需要满足以下规则:

  • 从指定整数start开始,在闭区间[min, max]范围内交替向上、向下计数
  • 输出顺序按元素与start的距离从小到大排列,同距离下优先输出大于start的值
  • 禁止输出区间外的非法值,必须完整覆盖区间内所有整数,包含两个端点

示例入参:

var start = 4;
var max = 10;
var min = 0;
var stepSize = 1;

对应期望输出:

4 5 3 6 2 7 1 8 0 9 10

原有实现问题

原有代码通过硬编码模运算、固定循环次数实现交替逻辑,没有加入边界判断:当某一侧计数触达区间端点后,仍按固定步长交替跳转,最终输出越界值-1,同时遗漏区间最大值10,仅能适配固定长度的区间场景,通用性差。

正确实现方案

核心逻辑是按距离逐轮遍历,每轮分别校验上下两个方向的值是否在合法区间内,合法才输出,直到两个方向都超出区间边界时终止循环。

通用while循环实现(适配任意参数)

// 入参定义
int start = 4;
int max = 10;
int min = 0;
int stepSize = 1;

// 先输出距离为0的起始值
Console.Write(start);
int currentDistance = stepSize;

// 只要任意方向还有合法值就继续遍历
while (start + currentDistance <= max || start - currentDistance >= min)
{
    // 优先输出向上方向的合法值
    int upValue = start + currentDistance;
    if (upValue <= max)
    {
        Console.Write($" {upValue}");
    }

    // 再输出向下方向的合法值
    int downValue = start - currentDistance;
    if (downValue >= min)
    {
        Console.Write($" {downValue}");
    }

    // 距离累加步长,进入下一轮
    currentDistance += stepSize;
}

Console.WriteLine();

运行上述代码可以直接得到期望输出,不存在越界、漏值问题,同时支持自定义步长、任意区间范围,不需要针对特定区间硬编码参数。

适配原有for循环框架的写法

如果需要沿用for循环结构,可将距离变量作为循环迭代值,边界判断作为循环终止条件:

// 先输出起始值
Console.Write(start);

for (
    int d = stepSize; 
    start + d <= max || start - d >= min; 
    d += stepSize
)
{
    if (start + d <= max) Console.Write($" {start + d}");
    if (start - d >= min) Console.Write($" {start - d}");
}

逻辑说明

  • 不预设固定循环次数,所有值输出前都做区间合法性校验,从根源避免越界
  • 单侧边先触达边界后,后续轮次会自动跳过该侧输出,仅处理另一侧剩余的合法值,直到双侧都触达边界自动终止
  • 同距离下固定先输出向上方向的值,匹配要求的输出顺序

内容的提问来源于stack exchange,提问作者Sebastian Weiß

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:33:19