F - LJJ王国的数学家
Description
想要成为LJJ王国的数学家,你要秒切这样一个问题:给定n和k,输出k个非负整数加和等于n的所有方案。(按字典序)
Input
两个整数分别为n和k。(0<k<=n<=10)
Output
按字典序输出所有方案。
Sample
Input
3 3
Output
3=0+0+3
3=0+1+2
3=0+2+1
3=0+3+0
3=1+0+2
3=1+1+1
3=1+2+0
3=2+0+1
3=2+1+0
3=3+0+0
#include <bits/stdc++.h>
using namespace std;
int ny,k;
void dfs(int n,int ceng,int *dp)
{
if(ceng==k&&n==0)//递归边界,如果已经有k份了,并且数字加起来为n
{
printf("%d=",ny);
for(int i=0;i<k-1;i++)
{
printf("%d+",dp[i]);
}
printf("%d\n",dp[k-1]);
return;
}
if(ceng==k&&n!=0)//递归边界不满足则返回上一层
{
return;
}
for(int i=0;i<=n;i++)//所有可能
{
dp[ceng]=i;
dfs(n-i,ceng+1,dp);//递归
}
}
int main()
{
int dp[13]={0};
scanf("%d %d",&ny,&k);
dfs(ny,0,dp);
return 0;
}
king9666
发布了322 篇原创文章 · 获赞 123 · 访问量 2万+
私信
关注