111,094
社区成员




using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
bool first;
int cnt = 0;
foreach (var x in DoIt(array, 5, 30))
{
Console.Write("第{0}个解:\t", ++cnt);
first = true;
foreach (var y in x)
{
if (!first)
Console.Write("+");
else
first = false;
Console.Write(y);
}
Console.WriteLine("=30");
}
Console.WriteLine("_____________________________________总共{0}个解!", cnt);
Console.ReadKey();
}
private static IEnumerable<IEnumerable<int>> DoIt(int[] array, int count, int sum)
{
foreach (var x in DoIt(array, array.Length - 1, count, sum))
yield return x;
}
private static IEnumerable<IEnumerable<int>> DoIt(int[] array, int end, int count, int sum)
{
if (end < 0)
yield break;
if (count == 1)
for (var i = 0; i <= end; i++)
if (array[i] == sum)
yield return new int[] { array[i] };
foreach (var x in DoIt(array, end - 1, count, sum))
yield return x;
foreach (var x in DoIt(array, end - 1, count - 1, sum - array[end]))
yield return x.Concat(new int[] { array[end] });
}
}
}