using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { // 防止出现随机值无法组合 ) { Con = ; // 初始化数组长度 ; Arr = new int[Len]; Temp = new int[Con]; // 最小的数 ) * Con / ; // 最大的数 + Len) * Con / ; // 获取范围内的一个随机数 Random random = new Random(); Sum = random.Next(Min, Max + ); // GetConNum(, ); } Console.WriteLine(Sum); Console.WriteLine(ResDic.Count); //for (int i = 0; i < ResDic.Count; i++) { // Console.WriteLine(ResDic[i]); //} Console.ReadLine(); } /// <summary> /// 用于存储所有结果 /// </summary> private static Dictionary<int, string> ResDic = new Dictionary<int, string>(); /// <summary> /// 用于取值 /// </summary> private static int[] Arr; /// <summary> /// 用于存值 /// </summary> private static int[] Temp; /// <summary> /// 要取的数字个数 /// </summary> private static int Con; /// <summary> /// 总和 /// </summary> private static int Sum; /// <summary> /// 在Arr中取Con个不重复的数字 /// </summary> /// <param name="index"></param> /// <param name="init"></param> private static void GetConNum(int index, int init) { if (index >= Con) { // 计算这些数字的和 ; ; i < Temp.Length; i++) Tsum += Temp[i]; // 若和与Sum相同,全排列存入所有排列可能 if (Tsum == Sum) ListArray(); return; } for (int i = init; i < Arr.Length; i++) { Temp[index] = i; GetConNum(index + , i + ); } } /// <summary> /// 对数组Temp进行全排列 /// </summary> /// <param name="index"></param> private static void ListArray(int index) { // 一次排列结束后 if (index >= Temp.Length) { // 取出当前的排列结果,拼成字符串 string str = ""; ; i < Temp.Length; i++) { str += Temp[i]; ) str += ","; } // 将结果存入字典 ResDic.Add(ResDic.Count, str); return; } int t = Temp[index]; // 交换位置 for (int i = index; i < Temp.Length; i++) { Temp[index] = Temp[i]; Temp[i] = t; ListArray(index + ); // 还原 Temp[i] = Temp[index]; Temp[index] = t; } } } }