整数划分问题

来源:互联网 发布:数组一般什么时候用 编辑:程序博客网 时间:2024/04/28 21:53

将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,

其中n1≥n2≥…≥nk≥1,k≥1。

正整数n的这种表示称为正整数n的划分。求正整数n的不

同划分个数。

另:给出所有不同划分的情况。

 

例如正整数6有如下11种不同的划分:

    6;

   5+1;

   4+2,4+1+1;

   3+3,3+2+1,3+1+1+1;

   2+2+2,2+2+1+1,2+1+1+1+1;

   1+1+1+1+1+1。

输入一个正整数,给出不同的划分,并求出总数。

#include<iostream.h>

int d[50],sum=0;

void huafen(int m,int n,int k)    //将m分解为不大于n的组成数,k>=0是下标

{

       inti;

       if(0==m)                      //当m为0是表示得到一个划分,进行输出

       {

             

              sum++;                    //用来累计有多少种,并在最后输出。

              for(i=0;i<k;i++)

              {

                     cout<<d[i];

                     if(i<k-1)

                     cout<<"+";

                    

              }

              cout<<endl;

       }

for(i=(m<n? m:n);i>0;i--)//深度探索分解分解,大家可以适当输出m,n和K帮助理解递归

       {

    

              d[k]=i;

              huafen(m-d[k],d[k],k+1);  //递归分解,直到得到一个划分

       }

}

void main()

{

       intn;

       cout<<"请输入要划分的数: ";

       cin>>n;

       huafen(n,n,0);

       cout<<n<<"共有"<<sum<<"种不同划分"<<endl;

}


0 0
原创粉丝点击