本文主要是介绍头歌资源库(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;}
方法分析
我们可以使用递归的方法来实现这个问题
执行结果
结语
在无人问津的时刻努力
在万人瞩目的地方出现
!!!
这篇关于头歌资源库(4)求组合问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!