整数划分

描述将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不 同划分个数。

输入第一行是测试数据的数目M(1<=M<=10)。以下每行均包含一个整数n(1<=n<=10)。输出输出每组测试数据有多少种分法。

#include<iostream>
using namespace std;
int p(int n,int m)
{
    if(n<1||m<1)
    return 0;
    if(n==1||m==1)
    return 1;
    if(n==m)
    return p(n,n-1)+1;
    if(n<m)
    return p(n,n);
    if(n>m)
    return p(n-m,m)+p(n,m-1);
}
int main()
{
    int M,n;
    cin>>M;
    while(M--)
    {
        cin>>n;
        cout<<p(n,n)<<endl;
    }
}

posted on 2013-04-16 18:24  耶稣爱你  阅读(330)  评论(0)    收藏  举报