将一个正整数n表示成一系列的正整数之和,求共有几种划分方法

 

题目:将一个正整数n表示成一系列的正整数之和:求共有几种划分方法

n=n1+n2+n3+.....+nk   (n1>=n2>=n3.......>=1, k>=1)

被称作正整数的一个划分。正整数n可能存在不同的划分,例如正整数6的全部划分为

6=6

6=5+1

6=4+2     6=4+1+1

6=3+3       6=3+2+1       6=3+1+1+1

6=2+2+2   6=2+2+1+1   6=2+1+1+1+1

6=1+1+1+1+1+1

方法:找递推公式:

#include
using std::cout;
using std::endl;
using std::cin;

int partition(int abc, int max)//max表示划分的正整数中最大的正整数
{
    if(abc==1 || max==1)
    {
        return 1;
    }
    if(abc        return partition(abc, abc);
    if(abc==max)
        return partition(abc, abc-1)+1;
    if(abc>max)
        return partition(abc, max-1)+partition(abc-max, max);//由两部分组成:一部分由max-1表示;另一部分由max表示,可转化成abc-max的表示种类
}

int main()
{
    int abc;
    while(cin>>abc)
        cout<}

 

你可能感兴趣的:(IT笔试题,算法)