整数划分问题

来源:互联网 发布:手机淘宝店头像怎么换 编辑:程序博客网 时间:2024/05/18 02:10

描述

将一个正整数n表示成一系列正整数之和,n=n1+ n2+…+ nk(其中,n1≥n2≥…≥nk≥1,k≥1).正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分数,记作P(n)。

例如,正整数6有如下11种不同的划分,所以P(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.

输入

测试文件有多个测试数据,每个测试数据为一个正整数n(1≤n≤100),占一行。

输出

对每个测试数据计算其划分数P(n),每个结果占一行。

样例输入

6
2

样例输出

11
2

提示

算法不能使用简单循环和简单递归算法



#include<iostream>#include<cstdio>using namespace std;int fun(int n,int m){    if(n<1||m<1) return 0;   if(n==1||m==1) return 1;   if(n<m)  return fun(n,n);   if(n==m)  return fun(n,m-1)+1;   return fun(n,m-1)+fun(n-m,m);}int main(){ int n,i,j,s; while(cin>>n) {   if(n<1||n>100) break;   cout<<fun(n,n)<<endl; }return 0;}


原创粉丝点击