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



F - LJJ王国的数学家(dfs简单递归入门)F - LJJ王国的数学家(dfs简单递归入门) king9666 发布了322 篇原创文章 · 获赞 123 · 访问量 2万+ 私信 关注
上一篇:GNN学习笔记1——图的基本知识


下一篇:数字图像处理课后习题汇总