N个数中选择M个数的组合(1<M<N)

要求:利用递归算法求出N个数,并从1-N这N个数中,任意取M个数(1<M<N)的所有组合情况,用递归实现!

#include<stdio.h>

const int MAX = 10;
int g[MAX],N,M;
void dfs(int n,int m)
{
//int sum;//和 
for(int i=n;i>=1;i--)
{
g[m] = i;
if(m>1)
{
dfs(i-1,m-1);
}
else
{
for(int j=1;j<=M;j++)
{
printf("%d",g[j]);
//sum+=g[j]; 
}
/*
if(sum == n)
{
for(int j=i;j<=M;j++)
{
printf("%d",g[j]);
}
printf("\n");
}
*/
printf("\n");
}
}

int main()
{
/*
N=5,M=3;
dfs(N,M);
*/

printf("请输入和:");
scanf("%d",&N);
for(M=2;M<N;M++)
{
dfs(N,M);

}

return 0;

}

时间: 2024-09-16 10:17:30

N个数中选择M个数的组合(1&lt;M&lt;N)的相关文章

m个数中取n个数的组合

#include <stdio.h> int a[1000]; int end; // 保存输入要取的n值 // 从m个数中,取出n个数的组合 void Combination(int m, int n) { int i, j; for (i = m; i >= n; i--) { a[n] = i;// 最后一个位置的元素可以取m,m-1,m-2.....n if (n > 1) { Combination(i - 1, n - 1);// 从剩余的i-1个元素中取出n-1 }

n个数中取r个做组合

使用准则进行条件查询--1.4.从窗体中选择查询的条件

4.从窗体中选择查询的条件 前面的方法虽然简单,但对用户来说操作不够方便,对设计者来说也难以控制,如果通过窗体来实现,这些问题就可以解决了. 如下面的窗体,运行时用户可以在组合框中选择要查询司机的姓名,按下查询按钮就可以看到查询的结果. 下面详细地列出设计的步骤: 创建一个窗体,按下控件向导按钮,在窗体上添加一个组合框.在第一个对话框中选择"我想让组合框在一个表或查询中查找这些值",下一步. 选择一个为组合框提供数据的表或查询.下一步. 选择组合框中要显示的数据,通常除了选择要显示在组

使用准则进行条件查询--1.4.从窗体中选择查询的条件_Access

4.从窗体中选择查询的条件 前面的方法虽然简单,但对用户来说操作不够方便,对设计者来说也难以控制,如果通过窗体来实现,这些问题就可以解决了. 如下面的窗体,运行时用户可以在组合框中选择要查询司机的姓名,按下查询按钮就可以看到查询的结果. 下面详细地列出设计的步骤: 创建一个窗体,按下控件向导按钮,在窗体上添加一个组合框.在第一个对话框中选择"我想让组合框在一个表或查询中查找这些值",下一步. 选择一个为组合框提供数据的表或查询.下一步. 选择组合框中要显示的数据,通常除了选择要显示在组

常用算法:C#用回溯法找出n个自然数中取r个数的全排列

回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验.在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯. 本实例是用回溯法输出n个自然数中以r个数全排列.代码如下: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />public void Arrange(int n, int r) int i = 0, j; st

任意元素和-求一个数组中选出任意个数元素相加之和,求大神指教

问题描述 求一个数组中选出任意个数元素相加之和,求大神指教 求一个数组中选出任意个数元素相加之和,求大神指教 比如打印出arry[8]中,任意两个数相加的和,任意三个数相加的和,直到任意八个数相加的和. 求大神指教. 解决方案 不知道你用的什么语言 如果C#,参考我写的http://bbs.csdn.net/topics/390550326 这个问题其实就是求M选N,其中M=8,N循环1-8 然后得到每个组合再求和. 解决方案二: 不知道你使用的是什么语言,不过思路是这样的,你的要求是不是随机数

从M个数中随机取出N个

看到这样一个题目:在M个数中,随机取出其中的N个,要求等概率. 这应该是一个比较简单的题目,看到题目后的第一想法是:维护一个关于这M个数的集合,然后每次随机从集合中抽一个数,抽N次即可. 等概率显然不是什么问题,当然前提是假设随机函数是等概率的,否则任何方法都免谈了. 对于其中的每一个数,它在每一次不被抽走的概率是:(M-1)/M.(M-2)/(M-1).....(M-N)/(M-N-1),到最后还没被抽走的概率就是(M-N)/M,也就是说它会被抽走的概率是N/M. 看到一个网友的解决思路,感觉

c语言程序设计-C语言求从n个数中选出k个的最优算法

问题描述 C语言求从n个数中选出k个的最优算法 在计算组合问题时一般算法总会溢出,有没有啥极快又可以避免溢出的算法? 解决方案 外部排序,你可是试试看

java中实现递归计算二进制表示中1的个数_java

借助Java语言,运用递归算法计算整数N的二进制表示中1的个数 /*use the recursive algorithme to calculate * the number of "1" in the binary expression * of an Integer N. * Note:if N is an odd, then * the result is the result of N/2 plus 1. * And the program use the bit opera