凹凸工作室打造的一款字符和數字的組合排列組件工具,凹凸組合測試是由凹凸組合組件演變而來,可以幫助用戶快速計算出組合的可能性,很適合用來組合密碼,軟件需要.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官方手機版