有个需求,有n多个数,需要任意数字相加之后的和为10,求出有多少种组合算法比如 有  1,2,3,4,5 这几个数
有 1+4+5 或是 2+3+5  或是1+2+3+4  等组合谢谢各位了

解决方案 »

  1.   

     //求指定数字内制定和的拼法
            public static void GetA2() 
            {
                 int Num=10;//指定数字
                 int Sum = 10;//和
                int[] arr = new int[10];
                //结果集
                List<string> list = new List<string>();
                for (int a = 0; a < Sum; a++) 
                {
                    arr[a] = a + 1;
                }
                for (int q = 1; q < Sum+1; q++) 
                {
                    for (int w = 1; w < Sum+1; w++) 
                    {
                        for (int e = 1; e < Sum+1; e++) 
                        {
                            if (q != w && q != e&&w!=e) 
                            {
                                if (q + w + e == 10) 
                                {
                                    string str = q + "|" + w + "|" + e;
                                    if (!list.Contains(str)) 
                                    {
                                        list.Add(str);
                                    }
                                }
                            }
                        }
                    }
                }
                foreach (string str in list) 
                {
                    Console.WriteLine(str);
                }
            }
        }
    求更好的!!!!坐等高手
      

  2.   

      //求指定数字内制定和的拼法
            public static void GetA3()
            {
                //Num数字集合 Sum数字之和
                List<string> list = new List<string>();
                foreach (string str in GetNum(list, 10, 5,""))
                {
                    Console.WriteLine(str);
                }
            }        public static List<string> GetNum(List<string> list, int Sum,int Num, string strss)
            {
                bool isCheck = true;
                if (Sum > 2)
                {
                    for (int a =2; a < Num + 1; a++)
                    {
                        string str = "";
                        int first = a;
                        int last = Sum - a;
                        int[] arr = { first, last };
                        Array.Sort(arr);
                        foreach (int c in arr)
                        {
                            str += c + "|";
                        }
                        str = str.TrimEnd('|');
                        if (first != last && first > 0 && last > 0)
                        {
                            if (strss != "")
                            {
                                string strResult = str + "|" + strss;
                                string[] ssArr = strResult.Split('|');
                                string[] strarr = strss.Split('|');
                                //Array.Sort(strarr);
                                Array.Sort(ssArr);
                                str = "";
                                foreach (string strR in ssArr)
                                {
                                    str += strR + "|";
                                    if (Convert.ToInt32(strR) > Num)
                                        isCheck = false;
                                }
                                str = str.TrimEnd('|');
                                if (!strarr.Contains(first.ToString()) && !strarr.Contains(last.ToString()))
                                {
                                    if (!list.Contains(str))
                                    {
                                        if (isCheck)
                                        {
                                            list.Add(str);
                                            //Console.WriteLine(str);
                                        }
                                        for (int n = 0; n < arr.Length; n++)
                                        {
                                            GetNum(list, Convert.ToInt32(arr[n]), Num, ArrToStr(arr, n, strss));
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (!list.Contains(str))
                                {
                                    if (first<=Num && last<=Num)
                                    {
                                        list.Add(str);
                                        //Console.WriteLine(str);
                                    }
                                    for (int index = 0; index < arr.Length; index++)
                                    {
                                        GetNum(list, arr[index], Num, ArrToStr(arr, index, ""));
                                    }
                                }
                            }
                        }
                    }
                }
                return list;
            }        public static string ArrToStr(int[] arr,int index,string strA) 
            {
                
                string str="";
                for (int a = 0; a < arr.Length; a++) 
                {
                    if (a != index) 
                    {
                        str += arr[a].ToString() + "|";
                    }
                }
                if (str != "") 
                {
                    if (strA != "") 
                    {
                        return str + strA;
                    }
                    return str.TrimEnd('|');
                }
                return strA;
            }
    求高手!!!!!
      

  3.   

    to  chaichangaini: 感谢您的热心解答