从数组中取出n个元素的所有组合(递归实现)
今天在做POJ 1753时,需要枚举一个数组中所有组合。之前也遇到过类似的问题,如求从n个数组任意选取一个元素的所有组合都是想起来比较简单,但是设计成算法却颇费周折。
如数组为{1, 2, 3, 4, 5, 6},那么从它中取出3个元素的组合有哪些,取出4个元素的组合呢?
比如取3个元素的组合,我们的思维是:
取1、2,然后再分别取3,4,5,6;
取1、3,然后再分别取4,5,6;
......
取2、3,然后再分别取4,5,5;
......
这样按顺序来,就可以保证完全没有重复。
这种顺序思维给我们的启示便是这个问题可以用递归来实现,但是仅从上述描述来看,却无法下手。
我们可以稍作改变:
1.先从数组中A取出一个元素,然后再从余下的元素B中取出一个元素,然后又在余下的元素C中取出一个元素
2.按照数组索引从小到大依次取,避免重复
依照上面的递归原则,我们可以设计如下的算法,按照索引从小到大遍历:
//arr为原始数组
//start为遍历起始位置
//result保存结果,为一维数组
//count为result数组的索引值,起辅助作用
//NUM为要选取的元素个数
//arr_len为原始数组的长度,为定值
void combine_increase(int* arr, int start, int* result, int count, const int NUM, const int arr_len)
{int i = 0;for (i = start; i < arr_len + 1 - count; i++){result[count - 1] = i;if (count - 1 == 0){int j;for (j = NUM - 1; j >= 0; j--)printf("%d\t",arr[result[j]]);printf("\n");}elsecombine_increase(arr, i + 1, result, count - 1, NUM, arr_len);}
}
从数组中取出n个元素的所有组合(递归实现)相关推荐
- js随机从数组中取出几个元素
这篇文章为转载,我的需求是从题库中,随机抽几道题,作为新试卷.代码如下: var items = ['1','2','4','5','6','7','8','9','10']; 1.从数组items中 ...
- 从数组中取出m个数相加的结果(组合)
给定一个数组,输入m,求出m个数相加的和. 如num[6]={1,2,4,8,16,32};, m=1时,为 1,2,4,8,16,32 m=2时,为3,5,6,9,10,12,17,18,20,24 ...
- 从n个不同元素中取出m个元素排列组合
01. 问题 问题01. 算法: 从n个不同元素中取出m个元素的排列数是多少? 这些排列分别是什么? (其中: n > 0; 0 < m ≤ n;) 问题02. 算法: 从n个不同元素中取 ...
- python矩阵中找满足条件的元素_从numpy数组中取出满足条件的元素示例
例如问题:从 arr 数组中提取所有奇数元素. input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) output: #> array([1, ...
- C语言编程>第十八周 ⑧ 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
例题:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列. 注意:请勿改动主函数main与其他函数中的任何内容,仅在横线上填写所需的若干表达式或语句. 代码如 ...
- 数组中第K大元素(java多种方式实现)
题目描述: Leetcode215题:在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5 ...
- 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换。
题目: /* 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换. */ 代码: c++做的. #include<iostream> using names ...
- 分治法求数组中的最大最小元素
#include<iostream> using namespace std; //分而治之法求数组中的最大最小元素 void maxmin(int i,int j,int A[],int ...
- 指针增量和数组的关系,指针偏移的补充,(重要面试),gdp调试,将数组中的n个元素逆序存放
1.指针增量和数组的关系 //加1 代表了地址偏移了一个类型的字节数(整形数偏移四个字节,char形数偏移了一个字节) 再来下标法: 2.指针偏移的补充 也可以换一种写法(第12行) 但是呢同样的代 ...
最新文章
- 2017 Material design 第二章第六节《富有创造性的定制方案》
- Spring框架中IoC(控制反转)的原理
- tensorflow之XORerr1例题
- 以WBS模板和PBS自动生成WBS计划任务
- 【python初级】 ubuntu18.04下卸载Anaconda3
- 普及一下行业尖端知识——腾讯自研分布式数据库TBase
- ArcGIS的mxd文档存储为相对路径
- 微信 获取signature签名
- 华为消费者云的ServiceComb 微服务之旅
- Set集合及源码分析
- 深度详解什么是SaaS(软件即服务)
- DateTimePicker 日期时间选择器设置默认时间
- Android加载超长图(微博长图)
- ANT DESIGN VUE upload 上传excel (使用upliad组件,上传excel到页面表格)
- blackberry环境搭建
- 数字图像处理复习笔记
- 木马是如何编写的 FROM HACKBASE
- 安科瑞变电所运维云平台解决方案
- spring-boot-starter自动装配流程总结
- taichi安装与使用
热门文章
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
- 【组合数学】递推方程 ( 非齐次部分是 指数函数 且 底是特征根 | 求特解示例 )
- 【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- template模板中插入自定义参数
- 使用Filter跟踪Asp.net MVC页面加载(转)
- http://tpl.amazeui.org/
- 历史命令history
- [翻译]No.9352 SharePoint Pages(1)之SharePoint页面体系架构
- win10下mysql 8.0.18 安装配置方法图文教程