N分K份问题
记录记录
Q: N分成K份,问有多少种可能?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include<iostream> using namespace std;
int f(int n,int k,int now) { int i,s=0; if(k==1) return 1; else { for(i=now;i<=n/k;++i) s+=f(n-i,k-1,i); return s; } }
int main() { int N,K; cin>>N>>K; cout<<f(N,K,1); return 0; }
|
多个要求:输出每种情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include<iostream> using namespace std;
int a[60],s=0; void f(int n,int k,int pos) { int i,j; if(k==1) { a[pos]=n; s++; for(j=1;j<=pos;++j) cout<<a[j]<<" "; cout<<endl; } else { for(i=a[pos-1];i<=n/k;++i) { a[pos]=i; f(n-a[pos],k-1,pos+1); } } }
int main() { int N,K; cin>>N>>K; a[0]=1; f(N,K,1); return 0; }
|