您的位置:首页 > 其它

文章标题

2016-09-23 12:16 489 查看
一组数据{1,2,3,4,5,6,7,8,9,10,11,12} 里面若干个数相加等于15,列出所有可能,比如

1+2+12=15

1+3+11=15

1+2+3+4+5=15

7+8=15

2+3+10=15



更多 0

void Run()
{
int[] collection = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

foreach (var item in GetDistinctResult(collection, 15))
{
Console.WriteLine(string.Join(" + ", item));
}
}

IEnumerable<int[]> GetDistinctResult(int[] collection, int sum)
{
return GetResult(collection, sum).Distinct();
}

IEnumerable<int[]> GetResult(int[] collection, int sum)
{
for (int count = 1; count <= collection.Length; ++count)
foreach (var item in Fill(count, 0, collection, new int[count]))
if (item.Sum() == sum)
yield return item;
}

IEnumerable<int[]> Fill(int count, int start, int[] collection, int[] selection)
{
int num = count - 1;
int upper = collection.Length - num;
for (int i = start; i < upper; ++i)
{
selection[selection.Length - count] = collection[i];
if (num == 0)
yield return (int[])selection.Clone();
else
foreach (var item in Fill(num, i + 1, collection, selection))
yield return item;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法