凹凸工作室打造的一款字符和數(shù)字的組合排列組件工具,凹凸組合測試是由凹凸組合組件演變而來,可以幫助用戶快速計算出組合的可能性,很適合用來組合密碼,軟件需要.NET4.0以上的框架,歡迎免費下載!
凹凸組合組件功能介紹
實現(xiàn)字符或數(shù)字的組合排列。例如:ab 的所有組合為: ab,ba ;ab的所有不重復(fù)排列為:ab dll文件可以直接添加到VS解決方案中進行調(diào)用,目前只支持windows開發(fā)平臺,框架為.NET4.0及以上版本。
凹凸組合組件相關(guān)介紹
系統(tǒng)要求
32位、64位dll
Windows系統(tǒng)
.NET 4.0 及以上版本
Dll名稱
AoTu.ZhuHe.dll
調(diào)用方法
在VS中新建工程,然后在引用中添加AoTu.ZhuHe.dll即可。
凹凸組合組件方法及參數(shù)
1、Initia
描述
組合組件初始化,即組件注冊
static bool Initia(string sn)
參數(shù)
sn
[in]用于注冊的序列號
返回值
成功返回true,失敗返回false.
2、NumNoRepeAssembly
描述
獲取不重復(fù)組合
static ListstringNumNoRepeAssembly(string orderstr, int sec)
參數(shù)
orderstr
[in]輸入值,可以是數(shù)字、字母,也可以是數(shù)字和字母組合
[in]組合數(shù),取值為:2、3、4、5、6、7
返回值
成功返回數(shù)據(jù)列表,失敗返回null.
3、NumGroupAssembly
描述
獲取所有組合
static List<string> NumGroupAssembly(string str,int sec)
參數(shù)
str
[in]輸入值,可以是數(shù)字、字母,也可以是數(shù)字和字母組合
sec
[in]組合數(shù),取值為:2、3、4、5
返回值
成功返回數(shù)據(jù)列表,失敗返回null
字符串的排列和組合介紹
一、字符串的排列
用C++寫一個函數(shù), 如 Foo(const char *str), 打印出 str 的全排列,
如 abc 的全排列: abc, acb, bca, dac, cab, cba
1、全排列的遞歸實現(xiàn)
為方便起見,用123來示例下。123的全排列有123、132、213、231、312、321這六種。首先考慮213和321這二個數(shù)是如何得出的。顯然這二個都是123中的1與后面兩數(shù)交換得到的。然后可以將123的第二個數(shù)和每三個數(shù)交換得到132。同理可以根據(jù)213和321來得231和312。因此可以知道——全排列就是從第一個數(shù)字起每個數(shù)分別與它后面的數(shù)字交換。
2、去掉重復(fù)的全排列的遞歸實現(xiàn)
由于全排列就是從第一個數(shù)字起每個數(shù)分別與它后面的數(shù)字交換。我們先嘗試加個這樣的判斷——如果一個數(shù)與后面的數(shù)字相同那么這二個數(shù)就不交換了。如122,第一個數(shù)與后面交換得212、221。然后122中第二數(shù)就不用與第三個數(shù)交換了,但對212,它第二個數(shù)與第三個數(shù)是不相同的,交換之后得到221。與由122中第一個數(shù)與第三個數(shù)交換所得的221重復(fù)了。所以這個方法不行。
換種思維,對122,第一個數(shù)1與第二個數(shù)2交換得到212,然后考慮第一個數(shù)1與第三個數(shù)2交換,此時由于第三個數(shù)等于第二個數(shù),所以第一個數(shù)不再與第三個數(shù)交換。再考慮212,它的第二個數(shù)與第三個數(shù)交換可以得到解決221。此時全排列生成完畢。
3、全排列的非遞歸實現(xiàn)
要考慮全排列的非遞歸實現(xiàn),先來考慮如何計算字符串的下一個排列。如1234的下一個排列就是1243。只要對字符串反復(fù)求出下一個排列,全排列的也就迎刃而解了。
如何計算字符串的下一個排列了?來考慮926520這個字符串,我們從后向前找第一雙相鄰的遞增數(shù)字,20、52都是非遞增的,26即滿足要求,稱前一個數(shù)字2為替換數(shù),替換數(shù)的下標稱為替換點,再從后面找一個比替換數(shù)大的最小數(shù)(這個數(shù)必然存在),0、2都不行,5可以,將5和2交換得到956220,然后再將替換點后的字符串6220顛倒即得到950226。
對于像“4321”這種已經(jīng)是最“大”的排列,采用STL中的處理方法,將字符串整個顛倒得到最“小”的排列1234并返回false。
二、字符串的組合
題目:輸入一個字符串,輸出該字符串中字符的所有組合。舉個例子,如果輸入abc,它的組合有a、b、c、ab、ac、bc、abc。
上面我們詳細討論了如何用遞歸的思路求字符串的排列。同樣,本題也可以用遞歸的思路來求字符串的組合。
假設(shè)我們想在長度為n的字符串中求m個字符的組合。我們先從頭掃描字符串的第一個字符。針對第一個字符,我們有兩種選擇:第一是把這個字符放到組合中去,接下來我們需要在剩下的n-1個字符中選取m-1個字符;第二是不把這個字符放到組合中去,接下來我們需要在剩下的n-1個字符中選擇m個字符
- PC官方版
- 安卓官方手機版
- IOS官方手機版