數組組合演算法
⑴ 請問多個數組全組合演算法怎麼寫
publicclassMain{
publicstaticvoidmain(Stringargs[]){
System.out.println("主程序中運行");
String[]str1={"a","b"};String[]str2={"c","d"};String[]str3={"e","f"};
intn=str1.length*str2.length*str3.length;
intm=0;
String[]str4=newString[n];
for(inti=0;i<str1.length;i++)
for(intk=0;k<str2.length;k++)
for(intl=0;l<str3.length;l++){
str4[m]=str1[i]+str2[k]+str3[l];
m++;
}
for(intj=0;j<n;j++)
System.out.println(str4[j]);
Mainmain=newMain();
String[]str5=main.fun(str1,str2,str3);
for(intj=0;j<str5.length;j++)
System.out.println(str5[j]);
}
String[]fun(String[]str1,String[]str2,String[]str3){
System.out.println("方法調用,傳入3個數組,返回排列數組");
intn=str1.length*str2.length*str3.length;
intm=0;
String[]str4=newString[n];
for(inti=0;i<str1.length;i++)
for(intk=0;k<str2.length;k++)
for(intl=0;l<str3.length;l++){
str4[m]=str1[i]+str2[k]+str3[l];
m++;
}
returnstr4;
}
}
直接主程序可以直接運行的親,直接主程序和方法調用兩種方法都有哦,運行結果如下
⑵ 怎樣通過排列組合演算法求數字和
排列的定義及其計算公式:從n個不同元素中,任取m(m≤n,m與n均為自然數,下同)個元素按照一定的順序排成一列,叫做從n個不同元素中取出m個元素的一個排列;從n個不同元素中取出m(m≤n)個元素的所有排列的個數,叫做從n個不同元素中取出m個元素的排列數,用符號 A(n,m)表示。A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! 此外規定0!=1
排列組合
組合的定義及其計算公式:從n個不同元素中,任取m(m≤n)個元素並成一組,叫做從n個不同元素中取出m個元素的一個組合;從n個不同元素中取出m(m≤n)個元素的所有組合的個數,叫做從n個不同元素中取出m個元素的組合數。用符號 C(n,m) 表示。C(n,m)=A(n,m)∧2/m!=A(n,m)/m!; C(n,m)=C(n,n-m)。(其中n≥m)
其他排列與組合公式 從n個元素中取出m個元素的循環排列數=A(n,m)/m=n!/m(n-m)!. n個元素被分成k類,每類的個數分別是n1,n2,...nk這n個元素的全排列數為 n!/(n1!×n2!×...×nk!). k類元素,每類的個數無限,從中取出m個元素的組合數為C(m+k-1,m)。
(2)數組組合演算法擴展閱讀
1、加法原理:做一件事,完成它可以有n類辦法,在第一類辦法中有m1種不同的方法,在第二類辦法中有m2種不同的方法,……,在第n類辦法中有mn種不同的方法,那麼完成這件事共有N=m1+m2+m3+…+mn種不同方法。
⒉、第一類辦法的方法屬於集合A1,第二類辦法的方法屬於集合A2,……,第n類辦法的方法屬於集合An,那麼完成這件事的方法屬於集合A1UA2U…UAn。
⒊、分類的要求 :每一類中的每一種方法都可以獨立地完成此任務;兩類不同辦法中的具體方法,互不相同(即分類不重);完成此任務的任何一種方法,都屬於某一類(即分類不漏)。
⑵乘法原理和分步計數法
⒈、 乘法原理:做一件事,完成它需要分成n個步驟,做第一步有m1種不同的方法,做第二步有m2種不同的方法,……,做第n步有mn種不同的方法,那麼完成這件事共有N=m1×m2×m3×…×mn種不同的方法。
⒉、合理分步的要求
任何一步的一種方法都不能完成此任務,必須且只須連續完成這n步才能完成此任務;各步計數相互獨立;只要有一步中所採取的方法不同,則對應的完成此事的方法也不同。
參考資料:排列組合的網路