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

如何用指定值对数字列表进行从后往前的动态减法运算

实现从后往前的动态减法处理列表

以下是符合需求的Kotlin实现代码,会从列表末尾开始遍历,用指定的初始值逐个执行减法,直到剩余值归零,最终返回处理后的列表:

fun main() {
    var subtraction = 250
    val list = mutableListOf(300, 200, 100)
    val resultList = mutableListOf<Int>()

    // 从列表最后一个元素向前遍历
    for (i in list.lastIndex downTo 0) {
        val currentElement = list[i]
        when {
            subtraction <= 0 -> {
                // 剩余减法值已耗尽,直接保留原元素
                resultList.add(currentElement)
            }
            subtraction >= currentElement -> {
                // 剩余值足够抵消当前元素,更新剩余值,不保留当前元素
                subtraction -= currentElement
            }
            else -> {
                // 剩余值不足抵消当前元素,计算剩余元素值,耗尽剩余值
                resultList.add(currentElement - subtraction)
                subtraction = 0
            }
        }
    }

    // 反转列表以恢复原顺序
    resultList.reverse()
    println(resultList) // 输出: [300, 50]
}

代码逻辑说明

  1. 遍历方向:通过list.lastIndex downTo 0实现从列表最后一个元素到第一个元素的反向遍历
  2. 状态判断:
    • 当subtraction已归零,直接将当前元素加入结果列表
    • 当剩余值大于等于当前元素,用剩余值减去当前元素,更新剩余值,当前元素被完全抵消不保留
    • 当剩余值小于当前元素,计算当前元素减去剩余值的结果加入列表,同时将剩余值置0
  3. 顺序修正:因为是反向遍历添加元素,最后需要反转结果列表,恢复原列表的顺序

示例验证

针对题目中的输入:

  • 初始subtraction=250,列表[300,200,100]
  • 第一步处理100:250-100=150,剩余值更新为150,不保留100
  • 第二步处理200:150<200,计算200-150=50加入结果,剩余值置0
  • 第三步处理300:剩余值已归零,直接加入结果
  • 反转结果列表后得到[300,50],完全符合需求

内容的提问来源于stack exchange,提问作者Mariano Muendane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:25:33