nyoj 90 整数划分

整数划分

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
将正整数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。 
输入
第一行是测试数据的数目M(1<=M<=10)。以下每行均包含一个整数n(1<=n<=10)。
输出
输出每组测试数据有多少种分法。
样例输入
1
6
样例输出
11
AC:代码
 1  #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int cot;
 5 void fun(int y,int x)
 6 {
 7      cot ++;
 8      if(y>1)
 9      { int l,r;
10        for(l=y-x, r=x; l>=r ;l--,r++)
11          {
12             fun(l,r);
13          }
14      }
15 }
16 int main()
17 {
18     int t,n;
19     cin>>t;
20     while(t--)
21     {
22         cot =0;
23         cin>>n;
24         fun(n,1);
25         cout<<cot<<endl;
26     }
27     return 0;
28 }
29         
原文地址:https://www.cnblogs.com/lovychen/p/3652767.html