正整数M写成 1...N和的形式, 求所有可能的组合

小托尼 2015-04-21 04:58:34
之前记得有大神用LinQ实现了. 不过我找不到了,求链接和解释..
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-04-22
  • 打赏
  • 举报
回复
如果是找到其中一组数字 可以用贪婪算法,从大往小匹配 如果要找所有组合,那么只能暴力遍历,没有好办法
烟波钓 2015-04-22
  • 打赏
  • 举报
回复
引用 3 楼 yanbuodiao 的回复:
 static void Main(string[] args)
        {
            Knapsack(7, 8);
            //TestLinqOrder();
            Console.ReadLine();
        }

        static void Knapsack(int m, int n)
        {
            var list = Enumerable.Range(1, n).ToList();
            var allCombination = from t in Enumerable.Range(0, 1 << list.Count)
                                 select
                                     from i in Enumerable.Range(0, list.Count)
                                     where (t & (1 << i)) != 0
                                     select list[i];
            var result = allCombination.ToList().Where(c => c != null && c.Count() > 0 && c.Aggregate((p, i) => p + i) == m);

            result.ToList().ForEach(c =>
            {
                Console.WriteLine("结果");
                c.ToList().ForEach(d => Console.Write(d + ","));
                Console.WriteLine("");
            });
        }
http://stackoverflow.com/questions/15470672/finding-possible-combinations-linq
这个性能有些差 不知道还有刚好的办法没 记得有一个linq解决背包问题的 翻不到了
烟波钓 2015-04-22
  • 打赏
  • 举报
回复
 static void Main(string[] args)
        {
            Knapsack(7, 8);
            //TestLinqOrder();
            Console.ReadLine();
        }

        static void Knapsack(int m, int n)
        {
            var list = Enumerable.Range(1, n).ToList();
            var allCombination = from t in Enumerable.Range(0, 1 << list.Count)
                                 select
                                     from i in Enumerable.Range(0, list.Count)
                                     where (t & (1 << i)) != 0
                                     select list[i];
            var result = allCombination.ToList().Where(c => c != null && c.Count() > 0 && c.Aggregate((p, i) => p + i) == m);

            result.ToList().ForEach(c =>
            {
                Console.WriteLine("结果");
                c.ToList().ForEach(d => Console.Write(d + ","));
                Console.WriteLine("");
            });
        }
http://stackoverflow.com/questions/15470672/finding-possible-combinations-linq
  • 打赏
  • 举报
回复
一般实现这功能的都是兔子当督察……
本拉灯 2015-04-21
  • 打赏
  • 举报
回复
嗯,以前见过。不过CSDN收藏夹太烂了,没有搜索功能,找不到了。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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