当前位置:编程学习 > C#/ASP.NET >>

C++ 递推



把正整数N分解成M个正整数的和,即使M个数相同但顺序不同也认为是不同的方案,要求总方案数。如3=1+2跟3=2+1是两个不同的方案。
c++ --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{    
    class Program
    {
        static void Main(string[] args)
        {
            var result = OutPut(16, new int[] { 1, 2, 4 }, new List<int>());
            foreach (var item in result)
                Console.WriteLine(string.Join(",", item.Select(x => x.ToString())));
        }
 
        /// <summary>
        /// 求一个数 有些数的之和组成的排列
        /// </summary>
        /// <param name="sum">和数</param>
        /// <param name="array">构成的数字</param>
        /// <returns>返回能够组成的一个集合</returns>
        public static IEnumerable<List<int>> OutPut(int sum, int[] array, IEnumerable<int> seed)
        {
            if (seed.Sum() == sum)
                yield return seed.ToList();
            else
                foreach (var item in array.Select(x => seed.Concat(new int[] { x })).Where(x => x.Sum() <= sum).SelectMany(x => OutPut(sum, array, x)))
                    yield return item;
 
        }
    }
}
--------------------编程问答-------------------- http://bbs.csdn.net/topics/390360329

和这个类似
考虑顺序就去掉
.Where(x => x >= seed.LastOrDefault()) --------------------编程问答-------------------- 在递归是一个办法母函数是一个办法 ,母函数比递归 高太多. --------------------编程问答-------------------- 必须赞一下。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,