烂代码一段,备用,不是备看,万一哪天要用一下呢。
功能:把数字拆分,尽量在40以内,后面会很慢。如3可分成 1,1,1;1,2; 如4可分成 1,1,1,1;1,3;1,1,2;2,2;
static void Main(string[] args) { var x = SplitNumber(40); foreach (var a in x) { foreach (var i in a) { Console.Write("{0} ", i); } Console.WriteLine(); } Console.Read(); } private static List<List<int>> SplitNumber(int num) { if (num <= 0) return null; List<List<int>> ret = new List<List<int>>(); List<int> a = new List<int>(); a.Add(1); ret.Add(a); int ct = num - 1; while (ct > 0) { int rct = ret.Count; for (int i = 0; i < rct; i++) { var tp = ret[0]; ret.Remove(ret[0]); var cp = new List<int>(tp.ToArray()); cp.Add(1); if (!Exists(ret, cp)) ret.Add(cp); List<int> used = new List<int>(); for (int j = 0; j < tp.Count; j++) { var cpv = new List<int>(tp.ToArray()); cpv[j] = cpv[j] + 1; if (!Exists(ret, cpv)) ret.Add(cpv); } } ct--; } return ret; } private static bool Exists(List<List<int>> a, List<int> b) { foreach (var x in a) { if (x.Count == b.Count) { bool flag = false; foreach (var i in x) { if (!b.Contains(i)) { flag = true; break; } } if (!flag) return true; } } return false; }