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;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!