题目描述:
将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。
标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。
Output:
对于每组测试数据,输出N的划分数
Hint:
5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include<iostream> #include<algorithm> using namespace std; int main(){ int v[55][55]={0},a[55]; int N=51,n;v[0][0]=1; for(int i = 1; i <= N; i++) for(int j = 1; j <= N; j++) for(int k=i;k<=N;k++){ v[j][k]+=v[j-1][k-i];
} while(cin>>n){ int sum=0; for(int i=0;i<=N;i++){ sum+=v[i][n]; } cout<<sum<<endl; } }
|