现实问题:测试多个参数不同的组合情况对结果的影响
算法示例:
输入: A,B,C,D
输出:
A
A,B
A,B,C
A,B,C,D
A,C
A,C,D
A,D
B
B,C
B,C,D
B,D
C
C,D
D
算法实现逻辑:
对于每个元素来说,所做的工作就是要找到该元素能够组合的情况,所以这里直接递归寻找每个元素的组合。
由于这里不需要加上排列条件,按顺序从前往后找就不会有重复的情况了。
代码:
static void Main(string[] args) { var xcolnames = new List < string > { "A", "B", "C", "D"}; var paramGroup = new List<string>(); for (var i = 0; i < xcolnames.Count; i++) { paramGroup.Add(xcolnames[i]); Console.WriteLine(xcolnames[i]); FindPartner(i, new List<string>(), xcolnames, ref paramGroup); } } private static void FindPartner(int self, List<string> head, List<string> data, ref List<string> result) { for (var i = self + 1; i < data.Count; i++) { //找到就加入并输出 var cresult = new List<string>(head.ToArray()); cresult.Add(data[self]); cresult.Add(data[i]); result.Add(string.Join("+", cresult)); Console.WriteLine(string.Join("+", cresult)); //克隆之前的搭档 var headclone = new List<string>(head.ToArray()); headclone.Add(data[self]); FindPartner(i, headclone, data, ref result); } }