日期:2014-05-17  浏览次数:20909 次

一个正整数可以表示为多个正整数相加的格式,写一个函数求有多少种分拆?
一个正整数可以表示为多个正整数相加的格式 如 5=1+1+1+1+1,=1+1+1+2,=1+2+2 ,  =1+1+3    =2+3    =1+4,写一个函数求有多少种分拆?

求解!!

------解决方案--------------------
把一个整数当成是  2^n 相加

 5= 2^2 + 2^0 = 4 + 1
------解决方案--------------------
补充说明,最简单的计算就是  移位运算 >>  
------解决方案--------------------


  private  void calculate(int n, List<int> list1, int start)
        {
            if (n == 1)
            {
                for (int i = 0; i < list1.Count; i++)
                {
                    Console.Write(list1[i] + "+");
                }
                Console.WriteLine(1);
            }
            else
            {
                for (int i = start; i <= n / 2; i++)
                {
                    list1.Add(i);
                    calculate(n - i, list1, i);
                    list1.RemoveAt(list1.Count - 1);
                }
                for (int i = 0; i < list1.Count; i++)
                {
                    Console.Write(list1[i] + "+");
                }
                Console.WriteLine(n);
            }