博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[经典算法] 排列组合-N元素集合的M元素子集
阅读量:7294 次
发布时间:2019-06-30

本文共 679 字,大约阅读时间需要 2 分钟。

题目说明:

假设有个集合拥有n个元素,任意的从集合中取出m个元素,则这m个元素所形成的可能子集有那些?

 

题目解析:

假设有5个元素的集合,取出3个元素的可能子集如下:

{1 2 3}、{1 2 4 }、{1 2 5}、{1 3 4}、{1 3 5}、{1 4 5}、{2 3 4}、{2 3 5}、{2 4 5}、{3 4 5}

这些子集已经使用字典顺序排列,如此才可以观察出一些规则:

  1. 如果最右一个元素小于m,则如上面一样的不断加1
  2. 如果右边一位已至最大值,则加1的位置往左移
  3. 每次加1的位置往左移后,必须重新调整右边的元素为递减顺序

所以关键点就在于哪一个位置必须进行加1的动作,到底是最右一个位置要加1?还是其它的位置?
在实际撰写程式时,可以使用一个变数positon来记录加1的位置,position的初值设定为n-1,因为我们要使用队列,而最右边的索引值为最大的n-1,在position位置的值若小于m就不断加1,如果等于m了,position就减1,也就是往左移一个位置;由于位置左移后,右边的元素会经过调整,所以我们必须检查最右边的元素是否小于m,如果是,则position调整回n-1,如果不是,则positon维持不变。

 

程序代码:

#include 
using namespace std;void ShowResult(int data[], int M){ for (int i=0; i
 

转载于:https://www.cnblogs.com/Quincy/p/4837727.html

你可能感兴趣的文章
iOS证书(.p12)和描述文件(.mobileprovision)的导出和使用方法
查看>>
Comware 架构理解
查看>>
php抽象类和抽象方法
查看>>
得到输入内容的首字母
查看>>
sklearn特征选择和分类模型
查看>>
设计模式_桥梁模式
查看>>
设计模式C++实现——工厂方法模式
查看>>
语言数据类型
查看>>
Sql 解析XML 解决方案
查看>>
C++ mfc
查看>>
hadoop搭建与eclipse开发环境设置
查看>>
封装一个信号量集操作函数的工具
查看>>
职责要求
查看>>
java反射机制
查看>>
哈哈,好一个 uri,
查看>>
LVM扩容
查看>>
三:简单工厂模式
查看>>
正则表达式元字符
查看>>
【vue系列】elementUI 穿梭框右侧获取当前选中项的值的思路
查看>>
laravel and lumen 软删除操作
查看>>