F - LJJ王国的数学家(dfs简单递归入门)

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



发布了340 篇原创文章 · 获赞 128 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/king9666/article/details/104149037
F