头歌资源库(4)求组合问题

 一、 问题描述  

 二、算法思想

       假我们要从n个自然数中选取r个数的组合。

       首先,我们可以选取最大的数n作为一个组合中的数,然后从剩下的n-1个数中选取r-1个数的组合,这样就可以得到一个以n开头的组合。

       然后,我们再从剩下的n-1个数中选取r个数的组合,这样就可以得到一个不以n开头的组合。

       递归终止的条件是当r等于1时,我们就可以直接输出剩下的n个数中的每一个数作为一个组合。

三、代码实现 

#include <stdio.h>
int n,m;
int num[10]= {0};
void dfs(int x,int r)
{
    if(r==m+1)
{
    for(int i=1;i<=m;i++)
    printf("%d ",num[i]);
    printf("\n");
}

     for (int i = x; i >0; i--)

{

    num[r] = i;

     dfs(i-1,r+1);

}

}

int main(void)

{

while(~scanf("%d%d",&n,&m))

{

dfs(n,1);

}
printf("end");

return 0;

}

 方法分析 

     我们可以使用递归的方法来实现这个问题

执行结果 

  结语 

在无人问津的时刻努力

在万人瞩目的地方出现

!!!

相关推荐

  1. 基于栈的后缀算数表达式值(

    2024-06-18 15:16:07       35 阅读
  2. 58 回溯算法组合问题

    2024-06-18 15:16:07       55 阅读
  3. -贪心算法

    2024-06-18 15:16:07       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 15:16:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 15:16:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 15:16:07       87 阅读
  4. Python语言-面向对象

    2024-06-18 15:16:07       96 阅读

热门阅读

  1. 大数据智能化教学解决方案

    2024-06-18 15:16:07       28 阅读
  2. Mysql中常用的sql语句(适合萌新学习)

    2024-06-18 15:16:07       35 阅读
  3. 函数参数调用 4.0

    2024-06-18 15:16:07       34 阅读