文章标题
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
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; } }