拆分自然数

大概思路:用一个变量记录当前搜索的步数m,枚举m步内的所有组合,为了保证唯一,按降序枚举

 

 

代码
void splitN(int n, int m)
{
    
for (int i = 1; i <= n; ++i)
    {
        
if (x[m-1>= i)
        {
            x[m] 
= i;
            
            
int rest = n - i;
            
if (rest || m == 1)
            {
                splitN(rest, m 
+ 1);
            }
            
else
            {
                
++total;
                printf(
"%d\t", total);

                
for (int j = 1; j < m; ++j)
                {
                    printf(
"%d+", x[j]);
                }
                printf(
"%d\n", x[m]);
            }
        }
    }
}

 

 

posted @ 2010-09-07 00:19  断桥残雪  阅读(229)  评论(0编辑  收藏  举报