凹凸工作室打造的一款字符和数字的组合排列组件工具,凹凸组合测试是由凹凸组合组件演变而来,可以帮助用户快速计算出组合的可能性,很适合用来组合密码,软件需要.NET4.0以上的框架,欢迎免费下载!
凹凸组合组件功能介绍
实现字符或数字的组合排列。例如:ab 的所有组合为: ab,ba ;ab的所有不重复排列为:ab dll文件可以直接添加到VS解决方案中进行调用,目前只支持windows开发平台,框架为.NET4.0及以上版本。
凹凸组合组件相关介绍
系统要求
32位、64位dll
Windows系统
.NET 4.0 及以上版本
Dll名称
AoTu.ZhuHe.dll
调用方法
在VS中新建工程,然后在引用中添加AoTu.ZhuHe.dll即可。
凹凸组合组件方法及参数
1、Initia
描述
组合组件初始化,即组件注册
static bool Initia(string sn)
参数
sn
[in]用于注册的序列号
返回值
成功返回true,失败返回false.
2、NumNoRepeAssembly
描述
获取不重复组合
static ListstringNumNoRepeAssembly(string orderstr, int sec)
参数
orderstr
[in]输入值,可以是数字、字母,也可以是数字和字母组合
[in]组合数,取值为:2、3、4、5、6、7
返回值
成功返回数据列表,失败返回null.
3、NumGroupAssembly
描述
获取所有组合
static List<string> NumGroupAssembly(string str,int sec)
参数
str
[in]输入值,可以是数字、字母,也可以是数字和字母组合
sec
[in]组合数,取值为:2、3、4、5
返回值
成功返回数据列表,失败返回null
字符串的排列和组合介绍
一、字符串的排列
用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,
如 abc 的全排列: abc, acb, bca, dac, cab, cba
1、全排列的递归实现
为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。然后可以将123的第二个数和每三个数交换得到132。同理可以根据213和321来得231和312。因此可以知道——全排列就是从第一个数字起每个数分别与它后面的数字交换。
2、去掉重复的全排列的递归实现
由于全排列就是从第一个数字起每个数分别与它后面的数字交换。我们先尝试加个这样的判断——如果一个数与后面的数字相同那么这二个数就不交换了。如122,第一个数与后面交换得212、221。然后122中第二数就不用与第三个数交换了,但对212,它第二个数与第三个数是不相同的,交换之后得到221。与由122中第一个数与第三个数交换所得的221重复了。所以这个方法不行。
换种思维,对122,第一个数1与第二个数2交换得到212,然后考虑第一个数1与第三个数2交换,此时由于第三个数等于第二个数,所以第一个数不再与第三个数交换。再考虑212,它的第二个数与第三个数交换可以得到解决221。此时全排列生成完毕。
3、全排列的非递归实现
要考虑全排列的非递归实现,先来考虑如何计算字符串的下一个排列。如1234的下一个排列就是1243。只要对字符串反复求出下一个排列,全排列的也就迎刃而解了。
如何计算字符串的下一个排列了?来考虑926520这个字符串,我们从后向前找第一双相邻的递增数字,20、52都是非递增的,26即满足要求,称前一个数字2为替换数,替换数的下标称为替换点,再从后面找一个比替换数大的最小数(这个数必然存在),0、2都不行,5可以,将5和2交换得到956220,然后再将替换点后的字符串6220颠倒即得到950226。
对于像“4321”这种已经是最“大”的排列,采用STL中的处理方法,将字符串整个颠倒得到最“小”的排列1234并返回false。
二、字符串的组合
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
上面我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串的组合。
假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;第二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符
- PC官方版
- 安卓官方手机版
- IOS官方手机版