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()))); }
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;
}
}
}
考虑顺序就去掉
.Where(x => x >= seed.LastOrDefault())