关于求和的算法

hk207 2017-03-15 05:19:28
已知:
① 一组个数不定的数字数组N,如:N=[1,5,12,54,14,11,13,123,22];
② 一个和数S,如:S=17;
求:该数组N所有和值等于S的组合数字,如举例的为[5,12]或者[1,5,11]。
求大神指点该需求如何实现?
...全文
248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天空丶蒋 2017-03-16
  • 打赏
  • 举报
回复

           int[] N = new int[] { 1, 5, 12, 54, 14, 11, 13, 123, 22 }; 
            var results = new List<List<int>>(); 
            results.AddRange(FullCombination(N.ToList())); 
            results = results.Where(w => w.Sum()==17).ToList();
 public static List<List<T>> FullCombination<T>(List<T> lstSource)
        {
            var n = lstSource.Count;
            var max = 1 << n;
            var lstResult = new List<List<T>>();
            for (var i = 0; i < max; i++)
            {
                var lstTemp = new List<T>();
                for (var j = 0; j < n; j++)
                {
                    if ((i >> j & 1) > 0)
                    {
                        lstTemp.Add(lstSource[j]);
                    }
                }
                lstResult.Add(lstTemp);
            }
            lstResult.RemoveAt(0);
            return lstResult;
        }
hk207 2017-03-16
  • 打赏
  • 举报
回复
引用 1 楼 peng2739956 的回复:
{5,1,3,2} S=5 那么 和为{5},{3,2}.....? 这种形态?
嗯,就是这形态。 其中{3,2} 和 {2,3}只要其一。
「已注销」 2017-03-16
  • 打赏
  • 举报
回复
1、排序一下,从大到小排。 2、贪心算法。 3、遍历贪心算法。
peng2739956 2017-03-16
  • 打赏
  • 举报
回复
组合方法 不能两两重复,或者N-N重复就行。
by_封爱 2017-03-16
  • 打赏
  • 举报
回复
组合一下子然后把所有的结果集都求出来 赛选一下子. 比如

var ar=new int[5]{1,2,3,4,5};
list<int[]> arr=组合方法(ar);
var q = arr.Select(d => new { sum = d.Sum(), item = d }).Where(d => d.sum == 17);
就行了. 至于"组合方法" 你自己随便百度就行了...
peng2739956 2017-03-16
  • 打赏
  • 举报
回复
穷举出所有的排列 假设 S=13 数组为{5,11,2,13,6,2} 那么久要先列出所有的排列 另外要剔除重复排列 如:{5,6,2} !={5,2,6}!={6,5,2}!={6,2,5}!={2,6,5}!={2,5,6} 这种方式,那么只需要一次排列就行了。 这样就简单多了
peng2739956 2017-03-16
  • 打赏
  • 举报
回复
{5,1,3,2} S=5 那么 和为{5},{3,2}.....? 这种形态?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧