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

C#非递归实现可变列数上下值所有组合求和的方法

实现思路

每列仅存在2种取值选择,总组合数为2^n(n为列数),直接通过位运算遍历所有组合即可,无需递归:

  • 遍历范围为0到(1 << n) - 1的整数,整数的每一位对应一列的取值选择
  • 某一位取值为0时取对应列的下限,为1时取对应列的上限
  • 累加当前组合的所有取值,即可得到对应组合的求和结果
C# 实现代码
using System;
using System.Collections.Generic;

public static class CombinationSumCalc
{
    // 入参为每列的上下限集合,返回所有组合的求和结果
    public static List<int> GetAllCombinationSums(List<(int ValueInf, int ValueSup)> columns)
    {
        var results = new List<int>();
        int combinationCount = 1 << columns.Count; // 等价于2的列数次方

        for (int mask = 0; mask < combinationCount; mask++)
        {
            int currentSum = 0;
            for (int colIndex = 0; colIndex < columns.Count; colIndex++)
            {
                // 根据当前位的标识选择取上下限
                currentSum += (mask & (1 << colIndex)) != 0 
                    ? columns[colIndex].ValueSup 
                    : columns[colIndex].ValueInf;
            }
            results.Add(currentSum);
        }
        return results;
    }

    // 示例运行入口
    public static void Main()
    {
        var testColumns = new List<(int, int)>
        {
            (5, 10), (6, 20), (7, 30)
        };
        var allSums = GetAllCombinationSums(testColumns);
        allSums.ForEach(sum => Console.WriteLine(sum));
    }
}
示例输出

运行测试用例得到的8个结果依次为:18、41、32、55、23、46、37、60,和你列出的所有组合求和结果完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:03